Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add RepositoryInfoAspect and ChannelRootAspect.Version to capture "Source-Editor Info" for both Connectors and Authoring. #410

Merged
merged 5 commits into from
Jan 17, 2025
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions Domains/0-Core/BisCore.ecschema.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1034,6 +1034,19 @@
</ECProperty>
<ECProperty propertyName="Format" typeName="string" displayLabel="Format" description="The format of the external repository."/>
</ECEntityClass>
<ECEntityClass typeName="RepositoryInfoAspect" displayLabel="Repository Info Aspect" modifier="None" description="A bis:ElementUniqueAspect that identifies a bis:Element as one of the roots of a *channel*, specified by its *channel-key*, which is a subset of the overall model-hierarchy and associated data, that is independently maintained.">
<BaseClass>ElementUniqueAspect</BaseClass>
<ECProperty propertyName="OriginatingSystem" typeName="string" displayLabel="Originating System" description="Name and optionally version of the software application or tool that created data in the External DataSource referenced through the owning RepositoryLink"/>
</ECEntityClass>
<ECRelationshipClass typeName="RepositoryLinkOwnsInfoAspect" strength="embedding" modifier="None">
<BaseClass>ElementOwnsUniqueAspect</BaseClass>
<Source multiplicity="(1..1)" roleLabel="owns" polymorphic="true">
<Class class="RepositoryLink"/>
</Source>
<Target multiplicity="(0..1)" roleLabel="is owned by" polymorphic="true">
<Class class="RepositoryInfoAspect"/>
</Target>
</ECRelationshipClass>

<ECEntityClass typeName="EmbeddedFileLink" displayLabel="Embedded File Link" description="A bis:EmbeddedFileLink is a bis:LinkElement that links to a file embedded within the iModel.">
<BaseClass>LinkElement</BaseClass>
Expand Down Expand Up @@ -1860,6 +1873,7 @@
<ECEntityClass typeName="ChannelRootAspect" displayLabel="Channel Root Aspect" modifier="Sealed" description="A bis:ElementUniqueAspect that identifies a bis:Element as one of the roots of a *channel*, specified by its *channel-key*, which is a subset of the overall model-hierarchy and associated data, that is independently maintained.">
<BaseClass>ElementUniqueAspect</BaseClass>
<ECProperty propertyName="Owner" typeName="string" description="Channel-key of the channel"/>
<ECProperty propertyName="Version" typeName="string" description="Semantic version of the data-organization and default content in the channel, set by the Owner that last edited it."/>
</ECEntityClass>
<ECRelationshipClass typeName="ElementOwnsChannelRootAspect" strength="embedding" modifier="None">
<BaseClass>ElementOwnsUniqueAspect</BaseClass>
Expand Down
7 changes: 6 additions & 1 deletion Domains/0-Core/BisCore.remarks.md
Original file line number Diff line number Diff line change
Expand Up @@ -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*.

Expand Down
Loading