diff --git a/Domains/0-Core/BisCore.ecschema.xml b/Domains/0-Core/BisCore.ecschema.xml index b10a752dd..7658fb837 100644 --- a/Domains/0-Core/BisCore.ecschema.xml +++ b/Domains/0-Core/BisCore.ecschema.xml @@ -1034,6 +1034,19 @@ + + ElementUniqueAspect + + + + ElementOwnsUniqueAspect + + + + + + + LinkElement @@ -1873,6 +1886,7 @@ ElementUniqueAspect + ElementOwnsUniqueAspect diff --git a/Domains/0-Core/BisCore.remarks.md b/Domains/0-Core/BisCore.remarks.md index 8b1b0d710..78492d525 100644 --- a/Domains/0-Core/BisCore.remarks.md +++ b/Domains/0-Core/BisCore.remarks.md @@ -396,7 +396,12 @@ Applications create channels to define portions of the model-hierarchy that they Each Element (typically a `Subject` or `InformationPartitionElement`) that owns a `ChannelRootAspect` defines a root of the model-hierarchy that is included in a particular *channel*. It recursively descends down through `ElementOwnsChildElements` and `ModelModelsElement` relationships to include all of the child elements and sub-models into the specified *channel*. A *channel* is conceptually identified by its _Channel Key_ value of the `Owner` property of a `ChannelRootAspect`. -There may be more than one root `Subject`s or `InformationPartitionElement`s in a model-hierarchy that are included in the same *channel*. In that case, each `Subject` or `InformationPartitionElement` instance specifies the same _Channel Key_ value in their `ChannelRootAspect`. +Applications can optionally use the `ChannelRootAspect.Version` property in order to assign a _semantic version_ number to the data-organization in a *channel*. _Semantic versioning_ aims at efficiently advertising read and write backwards-compatibility with respect to previous versions of the owning Application of a *channel*. + +_Semantic versioning_ of *channels* follows the "[read-version].[write-version].[minor-version]" format. +- [read-version] is incremented when the data-organization of a *channel* is changed in ways that older versions of an Application cannot safely understand it for reading purposes. +- [write-version] is incremented when the data-organization of a *channel* is changed in ways that it is not safe for older versions of an Application to add, modify or delete data in it. +- [minor-version] is incremented when the data-organization of a *channel* is changed in ways that older versions of an Application can still safely read it or write to it. Note that *Channels* do not nest. That is, once a `Subject` or `InformationPartitionElement` instance defines a root to be included in a particular *channel*, no descendant Element of such root in the subject-hierarchy can be used to define a root for a different *channel*.