IFC (IFC4X3_ADD2) under development Revision Control

While objects may reflect a final state, they may also be continually revised over the course of a project lifecycle and reflect transient state. For scenarios of multiple users making updates to the same information, there is a concept of local copies of information based upon a shared repository supporting multiple users. Such shared repository is often referred to as a model server. A model server is similar in concept to a document revision server, but is able to identify changes declared on a per-object basis rather than inferring changes from differences in text. A model server has a concept of revisions on a per-project basis, where each revision consists of a set of changes to contained objects by a particular user at a particular time.

To support a model server scenario, each object may be marked with a change action indicating the object was added, modified, deleted, or has no change since the project was retrieved from the server at a particular revision sequence. Given an object's identity (IFC-GUID) and change action, the state of the object may be merged when submitted to a model server. An object is considered modified when any of its direct attributes change, attributes on a referenced resource definition (any entity not deriving from IfcRoot) change, items are added or removed from sets, or items are added, removed, or reordered within lists.

For cases when multiple users make conflicting changes to the same objects, users may choose to keep their own changes, accept changes from others, merge both changes, or a combination thereof upon submitting to a server. Alternatively, to avoid such merge scenario and coordinate work, objects may be locked such that a particular user has exclusive access to read and/or write a particular object at the current time.

Project libraries may also be retrieved from model servers having particular revision, and potentially different server URI than the referencing Project. As a project may include multiple revisions of the same project library (a common scenario when multiple users are involved using libraries revised by others), the IfcRoot.ObjectIdentifier IFC-GUID is only valid within the scope of the referencing project, and a separate library reference identifies a project library based object within its originating model server.

Finally, objects may also carry informational attributes indicating when an object was created, who, when, and what application was used to last modify an object, and who currently owns the object, potentially having exclusive use according to its lock state.

The following diagram shows the generic classes and relationships used when applying this concept. In addition, concepts may have particular importance to common or standardised industry practices and scenarios. For these specific usage scenarios, the table below shows a recommended list of general usage patterns that users may adopt.

G IfcRoot IfcRoot 1. GlobalId [1:1] 2. OwnerHistory [0:1] 3. Name [0:1] 4. Description [0:1] IfcOwnerHistory IfcOwnerHistory 1. OwningUser [1:1] 2. OwningApplication [1:1] 3. State [0:1] 4. ChangeAction [0:1] 5. LastModifiedDate [0:1] 6. LastModifyingUser [0:1] 7. LastModifyingApplication [0:1] 8. CreationDate [1:1] IfcRoot:OwnerHistory1->IfcOwnerHistory:IfcOwnerHistory0 IfcPersonAndOrganization_0 IfcPersonAndOrganization 1. ThePerson [1:1] 2. TheOrganization [1:1] 3. Roles [1:?] IfcOwnerHistory:OwningUser1->IfcPersonAndOrganization_0:IfcPersonAndOrganization0 IfcApplication_0 IfcApplication 1. ApplicationDeveloper [1:1] 2. Version [1:1] 3. ApplicationFullName [1:1] 4. ApplicationIdentifier [1:1] IfcOwnerHistory:OwningApplication1->IfcApplication_0:IfcApplication0 IfcStateEnum IfcStateEnum IfcOwnerHistory:State1->IfcStateEnum:IfcStateEnum0 IfcChangeActionEnum IfcChangeActionEnum IfcOwnerHistory:ChangeAction1->IfcChangeActionEnum:IfcChangeActionEnum0 IfcTimeStamp_0 IfcTimeStamp IfcOwnerHistory:CreationDate1->IfcTimeStamp_0:IfcTimeStamp0 IfcTimeStamp_1 IfcTimeStamp IfcOwnerHistory:LastModifiedDate1->IfcTimeStamp_1:IfcTimeStamp0 IfcPersonAndOrganization_1 IfcPersonAndOrganization 1. ThePerson [1:1] 2. TheOrganization [1:1] 3. Roles [1:?] IfcOwnerHistory:LastModifyingUser1->IfcPersonAndOrganization_1:IfcPersonAndOrganization0 IfcApplication_1 IfcApplication 1. ApplicationDeveloper [1:1] 2. Version [1:1] 3. ApplicationFullName [1:1] 4. ApplicationIdentifier [1:1] IfcOwnerHistory:LastModifyingApplication1->IfcApplication_1:IfcApplication0 IfcPerson IfcPerson 1. Identification [0:1] 2. FamilyName [0:1] 3. GivenName [0:1] 4. MiddleNames [1:?] 5. PrefixTitles [1:?] 6. SuffixTitles [1:?] 7. Roles [1:?] 8. Addresses [1:?]      EngagedIn [0:?] IfcPersonAndOrganization_0:ThePerson1->IfcPerson:IfcPerson0 IfcOrganization IfcOrganization 1. Identification [0:1] 2. Name [1:1] 3. Description [0:1] 4. Roles [1:?] 5. Addresses [1:?]      IsRelatedBy [0:?]      Relates [0:?]      Engages [0:?] IfcPersonAndOrganization_0:TheOrganization1->IfcOrganization:IfcOrganization0 IfcActorRole_2 IfcActorRole 1. Role [1:1] 2. UserDefinedRole [0:1] 3. Description [0:1]      HasExternalReference [0:?] IfcPersonAndOrganization_0:Roles1->IfcActorRole_2:IfcActorRole0 IfcIdentifier_0 IfcIdentifier IfcPerson:Identification1->IfcIdentifier_0:IfcIdentifier0 IfcLabel_0 IfcLabel IfcPerson:FamilyName1->IfcLabel_0:IfcLabel0 IfcLabel_1 IfcLabel IfcPerson:GivenName1->IfcLabel_1:IfcLabel0 IfcLabel_2 IfcLabel IfcPerson:MiddleNames1->IfcLabel_2:IfcLabel0 IfcLabel_3 IfcLabel IfcPerson:PrefixTitles1->IfcLabel_3:IfcLabel0 IfcLabel_4 IfcLabel IfcPerson:SuffixTitles1->IfcLabel_4:IfcLabel0 IfcActorRole_0 IfcActorRole 1. Role [1:1] 2. UserDefinedRole [0:1] 3. Description [0:1]      HasExternalReference [0:?] IfcPerson:Roles1->IfcActorRole_0:IfcActorRole0 IfcTelecomAddress IfcTelecomAddress 1. Purpose [0:1] 2. Description [0:1] 3. UserDefinedPurpose [0:1]      OfPerson [0:?]      OfOrganization [0:?] 4. TelephoneNumbers [1:?] 5. FacsimileNumbers [1:?] 6. PagerNumber [0:1] 7. ElectronicMailAddresses [1:?] 8. WWWHomePageURL [0:1] 9. MessagingIDs [1:?] IfcPerson:Addresses1->IfcTelecomAddress:IfcTelecomAddress0 IfcIdentifier_1 IfcIdentifier IfcOrganization:Identification1->IfcIdentifier_1:IfcIdentifier0 IfcLabel_9 IfcLabel IfcOrganization:Name1->IfcLabel_9:IfcLabel0 IfcText_1 IfcText IfcOrganization:Description1->IfcText_1:IfcText0 IfcActorRole_1 IfcActorRole 1. Role [1:1] 2. UserDefinedRole [0:1] 3. Description [0:1]      HasExternalReference [0:?] IfcOrganization:Roles1->IfcActorRole_1:IfcActorRole0 IfcAddress IfcAddress 1. Purpose [0:1] 2. Description [0:1] 3. UserDefinedPurpose [0:1]      OfPerson [0:?]      OfOrganization [0:?] IfcOrganization:Addresses1->IfcAddress:IfcAddress0 IfcRoleEnum IfcRoleEnum IfcActorRole_2:Role1->IfcRoleEnum:IfcRoleEnum0 IfcLabel_10 IfcLabel IfcActorRole_2:UserDefinedRole1->IfcLabel_10:IfcLabel0 IfcText_2 IfcText IfcActorRole_2:Description1->IfcText_2:IfcText0 IfcAddressTypeEnum IfcAddressTypeEnum IfcTelecomAddress:Purpose1->IfcAddressTypeEnum:IfcAddressTypeEnum0 IfcLabel_5 IfcLabel IfcTelecomAddress:TelephoneNumbers1->IfcLabel_5:IfcLabel0 IfcLabel_6 IfcLabel IfcTelecomAddress:FacsimileNumbers1->IfcLabel_6:IfcLabel0 IfcLabel_7 IfcLabel IfcTelecomAddress:ElectronicMailAddresses1->IfcLabel_7:IfcLabel0 IfcURIReference_0 IfcURIReference IfcTelecomAddress:WWWHomePageURL1->IfcURIReference_0:IfcURIReference0 IfcURIReference_1 IfcURIReference IfcTelecomAddress:MessagingIDs1->IfcURIReference_1:IfcURIReference0 IfcText_0 IfcText IfcTelecomAddress:Description1->IfcText_0:IfcText0 IfcLabel_8 IfcLabel IfcTelecomAddress:UserDefinedPurpose1->IfcLabel_8:IfcLabel0

General Usage


Edit on Github

Is this page difficult to understand? Let us know!