4.1.3.6 Revision Control(版本控制)
虽然对象可能表示最终状态,但它们也可能在项目生命周期中不断被修改并表示瞬态状态。针对多用户更新同一信息的场景,存在基于支持多用户的共享存储库的本地信息副本概念。这种共享存储库通常被称为 模型服务器 。模型服务器在概念上类似于文档版本控制服务器,但能够按对象识别声明的变更,而不是从文本差异中推断变更。模型服务器具有按项目进行版本控制的概念,其中每个版本由特定用户在特定时间对包含对象进行的一组变更组成。
为了支持模型服务器场景,每个对象都可以标记一个 change action (变更动作),指示自项目从服务器的特定版本序列检索以来,该对象是新增、修改、删除还是未变更。给定对象的标识符 (IFC-GUID) 和变更动作,在提交到模型服务器时可以合并对象的状态。当对象的任何直接特性发生变更、引用的资源定义(任何不继承自 IfcRoot 的实体)上的特性发生变更、集合中添加或移除项,或列表中的项被添加、移除或重新排序时,该对象即被视为已修改。
当多个用户对同一对象进行冲突性修改时,用户在提交到服务器时可以选择保留自己的变更、接受他人的变更、合并两者的变更,或采用某种组合方式。或者,为了避免此类合并场景并协调工作,可以锁定对象,使特定用户在当前时间对特定对象拥有独占的读和/或写访问权限。
项目库也可以从具有特定版本且可能与引用项目具有不同服务器 URI 的模型服务器中检索。由于项目可能包含同一项目库的多个版本(当多个用户使用他人修改的库时,这是常见场景),IfcRoot .GlobalId (IFC-GUID)仅在引用项目的范围内有效,而单独的 library reference (库引用)用于标识其原始模型服务器内的基于项目库的对象。
最后,对象还可以携带信息特性,指示对象的创建时间、创建者、最后修改对象的时间和应用程序,以及当前所有者(可能根据其锁定状态拥有独占使用权)。
下图展示了应用此概念时使用的通用类和关系。
此外,概念可能对常见或标准化的行业实践和场景具有特殊意义。对于这些特定的使用场景,下表展示了用户可采用的推荐通用使用模式列表。
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRoot.htm'>IfcRoot</a>
IfcRoot
1. GlobalId
[1:1]
2. OwnerHistory
[0:1]
3. Name
[0:1]
4. Description
[0:1]
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOwnerHistory.htm'>IfcOwnerHistory</a>
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]
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRoot.htm'>IfcRoot</a>:OwnerHistory1-><a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOwnerHistory.htm'>IfcOwnerHistory</a>:IfcOwnerHistory0
IfcPersonAndOrganization_0
IfcPersonAndOrganization
1. ThePerson
[1:1]
2. TheOrganization
[1:1]
3. Roles
[1:?]
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOwnerHistory.htm'>IfcOwnerHistory</a>:OwningUser1->IfcPersonAndOrganization_0:IfcPersonAndOrganization0
IfcApplication_0
IfcApplication
1. ApplicationDeveloper
[1:1]
2. Version
[1:1]
3. ApplicationFullName
[1:1]
4. ApplicationIdentifier
[1:1]
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOwnerHistory.htm'>IfcOwnerHistory</a>:OwningApplication1->IfcApplication_0:IfcApplication0
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcStateEnum.htm'>IfcStateEnum</a>
IfcStateEnum
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOwnerHistory.htm'>IfcOwnerHistory</a>:State1-><a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcStateEnum.htm'>IfcStateEnum</a>:IfcStateEnum0
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcChangeActionEnum.htm'>IfcChangeActionEnum</a>
IfcChangeActionEnum
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOwnerHistory.htm'>IfcOwnerHistory</a>:ChangeAction1-><a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcChangeActionEnum.htm'>IfcChangeActionEnum</a>:IfcChangeActionEnum0
IfcTimeStamp_0
IfcTimeStamp
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOwnerHistory.htm'>IfcOwnerHistory</a>:CreationDate1->IfcTimeStamp_0:IfcTimeStamp0
IfcTimeStamp_1
IfcTimeStamp
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOwnerHistory.htm'>IfcOwnerHistory</a>:LastModifiedDate1->IfcTimeStamp_1:IfcTimeStamp0
IfcPersonAndOrganization_1
IfcPersonAndOrganization
1. ThePerson
[1:1]
2. TheOrganization
[1:1]
3. Roles
[1:?]
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOwnerHistory.htm'>IfcOwnerHistory</a>:LastModifyingUser1->IfcPersonAndOrganization_1:IfcPersonAndOrganization0
IfcApplication_1
IfcApplication
1. ApplicationDeveloper
[1:1]
2. Version
[1:1]
3. ApplicationFullName
[1:1]
4. ApplicationIdentifier
[1:1]
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOwnerHistory.htm'>IfcOwnerHistory</a>:LastModifyingApplication1->IfcApplication_1:IfcApplication0
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcPerson.htm'>IfcPerson</a>
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-><a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcPerson.htm'>IfcPerson</a>:IfcPerson0
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOrganization.htm'>IfcOrganization</a>
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-><a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOrganization.htm'>IfcOrganization</a>: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
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcPerson.htm'>IfcPerson</a>:Identification1->IfcIdentifier_0:IfcIdentifier0
IfcLabel_0
IfcLabel
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcPerson.htm'>IfcPerson</a>:FamilyName1->IfcLabel_0:IfcLabel0
IfcLabel_1
IfcLabel
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcPerson.htm'>IfcPerson</a>:GivenName1->IfcLabel_1:IfcLabel0
IfcLabel_2
IfcLabel
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcPerson.htm'>IfcPerson</a>:MiddleNames1->IfcLabel_2:IfcLabel0
IfcLabel_3
IfcLabel
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcPerson.htm'>IfcPerson</a>:PrefixTitles1->IfcLabel_3:IfcLabel0
IfcLabel_4
IfcLabel
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcPerson.htm'>IfcPerson</a>:SuffixTitles1->IfcLabel_4:IfcLabel0
IfcActorRole_0
IfcActorRole
1. Role
[1:1]
2. UserDefinedRole
[0:1]
3. Description
[0:1]
HasExternalReference
[0:?]
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcPerson.htm'>IfcPerson</a>:Roles1->IfcActorRole_0:IfcActorRole0
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcTelecomAddress.htm'>IfcTelecomAddress</a>
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:?]
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcPerson.htm'>IfcPerson</a>:Addresses1-><a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcTelecomAddress.htm'>IfcTelecomAddress</a>:IfcTelecomAddress0
IfcIdentifier_1
IfcIdentifier
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOrganization.htm'>IfcOrganization</a>:Identification1->IfcIdentifier_1:IfcIdentifier0
IfcLabel_9
IfcLabel
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOrganization.htm'>IfcOrganization</a>:Name1->IfcLabel_9:IfcLabel0
IfcText_1
IfcText
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOrganization.htm'>IfcOrganization</a>:Description1->IfcText_1:IfcText0
IfcActorRole_1
IfcActorRole
1. Role
[1:1]
2. UserDefinedRole
[0:1]
3. Description
[0:1]
HasExternalReference
[0:?]
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOrganization.htm'>IfcOrganization</a>:Roles1->IfcActorRole_1:IfcActorRole0
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcAddress.htm'>IfcAddress</a>
IfcAddress
1. Purpose
[0:1]
2. Description
[0:1]
3. UserDefinedPurpose
[0:1]
OfPerson
[0:?]
OfOrganization
[0:?]
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcOrganization.htm'>IfcOrganization</a>:Addresses1-><a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcAddress.htm'>IfcAddress</a>:IfcAddress0
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRoleEnum.htm'>IfcRoleEnum</a>
IfcRoleEnum
IfcActorRole_2:Role1-><a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRoleEnum.htm'>IfcRoleEnum</a>:IfcRoleEnum0
IfcLabel_10
IfcLabel
IfcActorRole_2:UserDefinedRole1->IfcLabel_10:IfcLabel0
IfcText_2
IfcText
IfcActorRole_2:Description1->IfcText_2:IfcText0
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcAddressTypeEnum.htm'>IfcAddressTypeEnum</a>
IfcAddressTypeEnum
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcTelecomAddress.htm'>IfcTelecomAddress</a>:Purpose1-><a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcAddressTypeEnum.htm'>IfcAddressTypeEnum</a>:IfcAddressTypeEnum0
IfcLabel_5
IfcLabel
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcTelecomAddress.htm'>IfcTelecomAddress</a>:TelephoneNumbers1->IfcLabel_5:IfcLabel0
IfcLabel_6
IfcLabel
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcTelecomAddress.htm'>IfcTelecomAddress</a>:FacsimileNumbers1->IfcLabel_6:IfcLabel0
IfcLabel_7
IfcLabel
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcTelecomAddress.htm'>IfcTelecomAddress</a>:ElectronicMailAddresses1->IfcLabel_7:IfcLabel0
IfcURIReference_0
IfcURIReference
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcTelecomAddress.htm'>IfcTelecomAddress</a>:WWWHomePageURL1->IfcURIReference_0:IfcURIReference0
IfcURIReference_1
IfcURIReference
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcTelecomAddress.htm'>IfcTelecomAddress</a>:MessagingIDs1->IfcURIReference_1:IfcURIReference0
IfcText_0
IfcText
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcTelecomAddress.htm'>IfcTelecomAddress</a>:Description1->IfcText_0:IfcText0
IfcLabel_8
IfcLabel
<a href='/IFC/RELEASE/IFC4x3/HTML/lexical/IfcTelecomAddress.htm'>IfcTelecomAddress</a>:UserDefinedPurpose1->IfcLabel_8:IfcLabel0
图 4.1.3.6.A
通用用法表 4.1.3.6.B