@bentley/bis-core-schema 1.0.17-dev.4 → 1.0.17-dev.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,546 @@
1
+ ---
2
+ noEditThisPage: true
3
+ remarksTarget: BisCore.ecschema.md
4
+ ---
5
+
6
+ # BisCore
7
+
8
+ BisCore contains the core classes that define the [fundamental building-blocks of BIS](../guide/intro/fabric-of-the-universe/) (e.g. Models, Elements, and ElementAspects) and which specialize them to establish domain-neutral base-classes for modeling the real world from multiple Modeling Perspectives.
9
+
10
+ BisCore also contains some less-fundamental classes related to infrastructure engineering visualization and documentation in general, such as drawings, views, etc.
11
+
12
+ The core classes are decorated by ECCustomAttributes that effectively define the database schema mapping for an iModel, but which can be ignored for other kinds of BIS Repositories. Other schemas cannot alter the underlying database schema mapping without explicit permission from BisCore.
13
+
14
+ The classes of BisCore are used as base classes for all classes in other BIS Domain schemas.
15
+
16
+ See [Base Infrastructure Schemas](../)
17
+
18
+ ## Entity Classes
19
+
20
+ ### ClassHasHandler
21
+
22
+ Applied to an ECClass to indicate that a system handler (written in C++) will supply behavior for it at run-time.
23
+ This custom attribute may only be used by BisCore and other core schemas.
24
+ Other schemas should use domain handlers (written in TypeScript) and the `SchemaHasBehavior` custom attribute applied to the ECSchema instead.
25
+
26
+ ### ISubModeledElement
27
+
28
+ Sub-modeling is also sometimes described as "breaking down", i.e. a sub-modeled Element can be "broken down into" a finer-grained (sub) Model.
29
+ See also [IParentElement](#iparentelement).
30
+
31
+ > Behavior: The system handler (C++) for `Element` only permits a sub-model to be inserted if the class of the *modeled element* implements the `ISubModeledElement` interface.
32
+
33
+ ### IParentElement
34
+
35
+ Only subclasses of bis:Element can implement the IParentElement interface
36
+
37
+ Parent-child modeling differs from sub-modeling in that the parent Element and child Elements are to be considered together in the context of a single Model, whereas a sub-modeled Element is considered independently of its sub-Model. For example, and application would view a parent Element and its child Elements together, but would *either* view a sub-modeled Element *or* exclude that Element and instead view the Elements of its sub-Model.
38
+
39
+ See also [ISubModeledElement](#isubmodeledelement).
40
+
41
+ ### InformationPartitionElement
42
+
43
+ An InformationPartitionElement partitions the information in a BIS Repository into non-overlapping hierarchies of Models and Elements, each with a distinct Modeling Perspective. In some cases it further-partitions information into distinct subsets within a Modeling Perspective, based on a specific domain.
44
+
45
+ A bis:Subject mentions a real-world Object. BIS *sees* the Object as one-or-more Entities, where each Entity considers the Object from a particular Modeling Perspective. A specialization of a bis:InformationPartitionElement establishes a Perspective for modeling the Object to which the Subject refers. The top-Model sub-models the Partition. The actual modeling of the Entity with one-or-more Elements of the appropriate Modeling Perspective begins in the top-Model.
46
+
47
+ See [Top of the World](../guide/data-organization/top-of-the-world/)
48
+
49
+ > Behavior: The system handler (C++) for `InformationPartitionElement` will only permit instances to be inserted into the `RepositoryModel`.
50
+ The system handler will also require every `InformationPartitionElement` to have its `Parent` property reference a `Subject`.
51
+
52
+ ### DefinitionPartition
53
+
54
+ The 'Definition' Modeling Perspective is for modeling definitions of things that are shared by multiple particular Entities.
55
+
56
+ > Behavior: The system handler (C++) for `DefinitionPartition` ensures that it is only ever sub-modeled by a `DefinitionModel`.
57
+
58
+ ### DocumentPartition
59
+
60
+ The 'Document' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It holds Elements which describes Entities using Documents and is used to create primary documents such as Drawings.
61
+
62
+ > Behavior: The system handler (C++) for `DocumentPartition` ensures that it is only ever sub-modeled by an `InformationModel` (typically `DocumentListModel`).
63
+
64
+ ### GroupInformationPartition
65
+
66
+ The 'GroupInformation' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It is used primarily to hold `generic:Group` Elements generated from DgnV8 'Named Groups'.
67
+
68
+ > Behavior: The system handler (C++) for `GroupInformationPartition` ensures that it is only ever sub-modeled by a `GroupInformationModel`.
69
+
70
+ ### InformationRecordPartition
71
+
72
+ The 'InformationRecord' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It can hold a broad array of information records describing Entities.
73
+
74
+ > Behavior: The system handler (C++) for `InformationRecordPartition` ensures that it is only ever sub-modeled by a `InformationRecordModel`.
75
+
76
+ ### LinkPartition
77
+
78
+ The 'Link' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It is used to hold links to external repositories, e.g. in the form of `bis:RepositoryLink` elements.
79
+
80
+ > Behavior: The system handler (C++) for `LinkPartition` ensures that it is only ever sub-modeled by a `LinkModel`.
81
+
82
+ ### LinkElement
83
+
84
+ The link is generally to some resource, e.g. the subclass `UrlLink` points to an external resource while `EmbeddedFileLink` points to files embedded in an iModel.
85
+
86
+ > Behavior: The system handler (C++) for `LinkElement` ensures that it is only ever inserted into an `InformationModel`.
87
+
88
+ ### PhysicalPartition
89
+
90
+ The 'Physical' Perspective is for modeling physical Entities (which have mass) and for spatial location Entities (which are generally either defined-by physical Entities or are used-to-define physical Entities).
91
+
92
+ > Behavior: The system handler (C++) for `PhysicalPartition` ensures that it is only ever sub-modeled by a `SpatialModel`.
93
+
94
+ ### PhysicalSystemPartition
95
+
96
+ The 'Physical System' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It holds Elements which group a collection of connected Entities (primarily Physical) that collectively implement some function..
97
+
98
+ ### PhysicalSystemAggregatesSubSystems
99
+
100
+ Forms a strict hierarchy (A PhysicalSystem can only be aggregated by a single 'aggregator').
101
+
102
+ See [PhysicalSystem](#physicalsystem) for more information.
103
+
104
+ ### SpatialLocationPartition
105
+
106
+ The “Spatial Location” perspective is a strict subset of the “Physical” perspective. Spatial locations are massless, but they manifest in the real physical world:
107
+
108
+ - They may be defined in relation to physical entities, e.g. the air gap between two conductors, the space around an access panel, the volume occupied by a physical Entity, or a surface demarcating a region on the surface of a physical entity.
109
+ - They may be used to guide positioning of physical Entities, e.g. grid lines that may be manifested physically on a construction site via chalk lines or laser beams.
110
+ - They may be abstractions of physical consequence, like property or political boundaries that are often demarcated in the physical world via markers, signs, or natural boundaries.
111
+
112
+ The 'Spatial Location' perspective is used by SpatialLocationModel and SpatialLocationElement in order to segregate certain kinds of elements.
113
+
114
+ In retrospect, the complexity added by introducing a distinct "Spatial Location" perspective may have not been worth the benefit. Our current recommendation is to not instantiate a SpatialLocationPartition, but instead organize spatial locations in the context of the 'physical backbone', i.e. the Physical model hierarchy.
115
+
116
+ > Behavior: The system handler (C++) for `SpatialLocationPartition` ensures that it is only ever sub-modeled by a `SpatialLocationModel`.
117
+
118
+ ### SheetIndexPartition
119
+
120
+ The 'Sheet Index' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It holds Elements that organize Sheets into hierarchies for easier access.
121
+
122
+ ### SheetIndexFolder
123
+
124
+ Instances of `SheetIndexFolder` are always contained within a `SheetIndexModel`.
125
+
126
+ ### SheetReference
127
+
128
+ Instances of `SheetReference` are always contained within a `SheetIndexModel`.
129
+
130
+ ### SheetIndexReference
131
+
132
+ Instances of `SheetIndexReference` are always contained within a `SheetIndexModel`.
133
+
134
+ ### SheetIndex
135
+
136
+ Instances of `SheetIndex` are always contained within a `SheetIndexModel`.
137
+
138
+ ### Model
139
+
140
+ See [Model Fundamentals](../guide/fundamentals/model-fundamentals/).
141
+
142
+ > Behavior: System handlers (written in C++) and domain handlers (written in TypeScript) provide behavior to specific `Model` subclasses.
143
+ The system handler for `Model` requires its `ModeledElement` property to reference an `Element` that implements `ISubModeledElement`.
144
+ This is enforced for all `Model` subclasses.
145
+
146
+ ### ModelOwnsSubModel
147
+
148
+ See [Model.ParentModel](#model) ECNavigationProperty.
149
+
150
+ ### ModelContainsElements
151
+
152
+ See [Element.Model](#element) ECNavigationProperty.
153
+
154
+ ### ModelModelsElement
155
+
156
+ See [Model.ModeledElement](#model) ECNavigationProperty.
157
+
158
+ A more accurate name for this relationship would have been 'ModelSubModelsElement', but the existing name cannot be changed in this generation of BIS.
159
+
160
+ ### DrawingModelBreaksDownDrawing
161
+
162
+ A more consistent name for this relationship would have been 'DrawingModelSubModelsDrawing', but the existing name cannot be changed in this generation of BIS. At times, we use "breaks down" as a synonym for "sub-models", but we are standardizing on "sub-models", reserving "breakdown" for use with various engineering breakdown structures.
163
+
164
+ ### SheetModelBreaksDownSheet
165
+
166
+ A more consistent name for this relationship would have been 'SheetModelSubModelsSheet', but the existing name cannot be changed in this generation of BIS. At times, we use "breaks down" as a synonym for "sub-models", but we are standardizing on "sub-models", reserving "breakdown" for use with various engineering breakdown structures.
167
+
168
+ ### SubjectRefersToSubject
169
+
170
+ A `bis:Subject` can be referenced by zero or more `bis:Subject` instances as opposed to the `bis:SubjectOwnsSubjects` relationship that leads to a strict hierarchy. This relationship is typically needed when the referencing and referenced `bis:Subject`s are located in different branches of the Subject hierarchy. With this relationship, the referencing `bis:Subject` is stating an association with the referenced `bis:Subject`s without duplicating them into its own branch. The concrete semantics behind such association is left for the data-writer or a human being to interpret, as it is generally the case with all `bis:Subject` instances on the Subject hierarchy as a whole.
171
+
172
+ ### Element
173
+
174
+ Sets of `bis:Element`s (contained in `bis:Model`s) are used to sub-model other `bis:Element`s that represent larger scale real world Entities. Using this recursive modeling strategy, `bis:Element`s can represent Entities at any scale. Elements can represent physical things, abstract concepts or simply be information records.
175
+
176
+ See [Element Fundamentals](../guide/fundamentals/element-fundamentals/).
177
+
178
+ > Behavior: System handlers (written in C++) and domain handlers (written in TypeScript) provide behavior to specific `Element` subclasses.
179
+ The system handler for `Element` requires a valid `Model` reference and a valid or *empty* `Code`.
180
+ If the `Parent` property is not `NULL`, the system handler also requires that the child Element be in the same Model as the parent Element.
181
+ This is enforced for all `Element` subclasses.
182
+
183
+ ### ElementRefersToElements
184
+
185
+ Subclasses of `ElementRefersToElements` can make use of the `MemberPriority` property to prioritize or order elements being referenced. By default, `MemberPriority` is set to *null* if not assigned. Duplicate not-null values for `MemberPriority` are allowed as long as the Sources, Targets, or the `ECClassId` of the relationships are different. Furthermore, duplicate Sources and Targets are accepted only if either their `ECClassId` or `MemberPriority` values are not the same.
186
+
187
+ ### ElementDrivesElement
188
+
189
+ In iModels, a change-propagation system calls handlers that allow the driven Element to be affected by the driving Element.
190
+ See [DriverBundleElement](#driverbundleelement).
191
+
192
+ ### DriverBundleElement
193
+
194
+ Used when multiple inputs for a "driving" relationship cannot be considered in isolation.
195
+
196
+ See [ElementDrivesElement](#elementdriveselement).
197
+
198
+ ### TypeDefinitionElement
199
+
200
+ A `TypeDefinitionElement` is an implementation of a data normalization strategy and is meant to hold properties that vary per *type* instead of varying per `Element` instance.
201
+ Rather than storing the same set of *type-specific* properties on every `Element` instance, each `Element` instance will have a set of *instance-specific* properties (as specified by the `Element` class) and a set of related *type-specific* properties found by joining to the `TypeDefinitionElement` instance.
202
+
203
+ See relationships such as [PhysicalElementIsOfType](#physicalelementisoftype).
204
+
205
+ ### PhysicalElementIsOfType
206
+
207
+ ### PhysicalType
208
+
209
+ A `PhysicalType` is particularly useful in cases where a physical item can be ordered from a *catalog*.
210
+ Each type of item will have the same set of *type-specific* properties.
211
+ For example: manufacturer name, model number, maintenance intervals, etc.
212
+
213
+ ### Subject
214
+
215
+ `Subject` elements only exist in the [RepositoryModel](#repositorymodel) singleton at the root of a BIS Repository. There will be one "root" instance of `Subject` that does not have a parent `Subject`. Child `Subject` elements reference "parts" of the real-world Object referenced by their parent `Subject` element.
216
+
217
+ The hierarchy of `Subject`s is not meant to model the root Object's structure, but is a way to express high-level structure that has not been modeled explicitly. `Subjects` do not "model" or "represent" or "describe" the Object that they reference. All modeling happens using Elements in the other bis:Models in the BIS Repository.
218
+
219
+ > Behavior: The system handler (C++) for `Subject` will only permit instances to be inserted into the `RepositoryModel`.
220
+ It will require every `Subject` except for the "root" to have its `Parent` property reference another `Subject`.
221
+ The system handler also prevents the "root" `Subject` from ever being deleted.
222
+
223
+ ### Category
224
+
225
+ Categories should be standardized by domain groups where possible. They generally correlate with groups of BIS Element classes, or a single base class.
226
+
227
+ See [Categories Introduction](../guide/fundamentals/categories/).
228
+
229
+ Also see the [ClassificationSystems](./classificationsystems.ecschema/) domain schema for another way of categorizing and classifying elements.
230
+
231
+ > Behavior: The system handler (C++) for `Category` requires a valid `CodeValue` (name) for every instance.
232
+ It will insert a *default* `SubCategory` for every `Category` that is inserted.
233
+ The system handler also restricts deletion. A `Category` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `Category` is no longer referenced.
234
+
235
+ ### SubCategory
236
+
237
+ > Behavior: The system handler (C++) for `SubCategory` requires a valid `CodeValue` (name) and a `Parent` property that references its owning `Category`.
238
+ The system handler also restricts deletion. A `SubCategory` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `SubCategory` is no longer referenced.
239
+
240
+ ### AutoHandledPropertyStatementType
241
+
242
+ Restrictions that may be applied to an AutoHandledProperty. Must match the ECSqlClassParams::StatementType enum
243
+
244
+ ### CodeSpecSpecifiesCode
245
+
246
+ See [Element.CodeSpec](#element) ECNavigationProperty.
247
+
248
+ ### ElementScopesCode
249
+
250
+ See [Element.CodeScope](#element) ECNavigationProperty.
251
+
252
+ ### TypeDefinitionHasRecipe
253
+
254
+ See [TypeDefinitionElement.Recipe ECNavigationProperty](#TypeDefinitionElement) ECNavigationProperty
255
+
256
+ ### GeometricElement2dHasTypeDefinition
257
+
258
+ See [GeometricElement2d.TypeDefinition ECNavigationProperty](#GeometricElement2d) ECNavigationProperty
259
+
260
+ ### GeometricElement3dHasTypeDefinition
261
+
262
+ See [GeometricElement3d.TypeDefinition ECNavigationProperty](#GeometricElement3d) ECNavigationProperty
263
+
264
+ ### SheetHasSheetTemplate
265
+
266
+ See [Sheet.SheetTemplate ECNavigationProperty](#Sheet) ECNavigationProperty
267
+
268
+ ### SheetTemplateHasSheetBorder
269
+
270
+ See [SheetTemplate.Border ECNavigationProperty](#SheetTemplate) ECNavigationProperty
271
+
272
+ ### SheetBorderHasSheetBorderTemplate
273
+
274
+ See [SheetBorder.BorderTemplate ECNavigationProperty](#SheetBorder) ECNavigationProperty
275
+
276
+ ### SheetIndexReferenceRefersToSheetIndex
277
+
278
+ See [SheetIndexReference.SheetIndex ECNavigationProperty](#SheetIndexReference) ECNavigationProperty
279
+
280
+ ### SheetReferenceRefersToSheet
281
+
282
+ See [SheetReference.Sheet ECNavigationProperty](#SheetReference) ECNavigationProperty
283
+
284
+ ### ViewIsAttached
285
+
286
+ See [ViewAttachment.View ECNavigationProperty](#ViewAttachment) ECNavigationProperty
287
+
288
+ ### ElementOwnsChildElements
289
+
290
+ See [Element.Parent ECNavigationProperty](#Element) ECNavigationProperty
291
+ Should be treated as abstract, but was not made abstract because of legacy usages that were already released.
292
+
293
+ ### Source
294
+
295
+ Source constraint should logically be IParentElement, but that mixin was invented later, and tightening the constraint could invalidate existing iModels
296
+
297
+ ### ElementOwnsUniqueAspect
298
+
299
+ See [ElementUniqueAspect.Element ECNavigationProperty](#ElementUniqueAspect) ECNavigationProperty
300
+
301
+ ### ElementOwnsMultiAspects
302
+
303
+ See [ElementMultiAspect.Element ECNavigationProperty](#ElementMultiAspect) ECNavigationProperty
304
+
305
+ ### GeometricElement2dIsInCategory" strength="referencing
306
+
307
+ See [GeometricElement2d.Category ECNavigationProperty](#GeometricElement2d) ECNavigationProperty
308
+
309
+ ### GeometricElement3dIsInCategory" strength="referencing
310
+
311
+ See [GeometricElement3d.Category ECNavigationProperty](#GeometricElement3d) ECNavigationProperty
312
+
313
+ ### ColorBook
314
+
315
+ Individual colors are stored in JsonProperties
316
+
317
+ ### GeometryPart
318
+
319
+ > Behavior: The system handler (C++) for `GeometryPart` requires valid geometry stored in the `GeometryStream` property for insertion to succeed.
320
+ The system handler also restricts deletion. A `GeometryPart` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `GeometryPart` is no longer referenced.
321
+
322
+ ### LineStyle
323
+
324
+ > Behavior: The system handler restricts deletion. A `LineStyle` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `LineStyle` is no longer referenced.
325
+
326
+ ### Texture
327
+
328
+ > Behavior: The system handler restricts deletion. A `Texture` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `Texture` is no longer referenced.
329
+
330
+ ### PhysicalMaterial
331
+
332
+ The `PhysicalMaterial` serves as the base class for the materials in the PhysicalMaterial schema. Generally, it is expected that domain-specific properties (e.g. strength properties for the structural domain) will be added to the subclasses such as Concrete and Steel using domain-specific ElementAspects.
333
+
334
+ The Density property in this base `PhysicalMaterial` class is intended to provide basic weight computation for the purposes of quantity takeoff and carbon footprint, for example, which are cross-domain functions. This kindOfQuantity for this property is AECU:DENSITY.
335
+
336
+ ### RenderMaterial
337
+
338
+ Marked as "Sealed" because JsonProperties will be used to persist data. This allows a single instance to "morph" between a DgnV8 render material and a future PBR material.
339
+
340
+ > Behavior: The system handler restricts deletion. A `RenderMaterial` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `RenderMaterial` is no longer referenced.
341
+
342
+ ### RenderTimeline
343
+
344
+ This information used to be stored within the `DisplayStyle` but was refactored out as a separate element for efficiency and reuse purposes.
345
+
346
+ ### SectionLocationUsesCategorySelector
347
+
348
+ See [SectionLocation.CategorySelector ECNavigationProperty](#SectionLocation) ECNavigationProperty
349
+
350
+ ### ViewDefinition
351
+
352
+ > Behavior: The system handler (C++) for `ViewDefinition` requires a valid `DisplayStyle` reference and a valid `CategorySelector` reference.
353
+ This applies to all `ViewDefinition` subclasses.
354
+ The system handler also restricts deletion. A `ViewDefinition` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `ViewDefinition` is no longer referenced.
355
+
356
+ ### SpatialViewDefinition
357
+
358
+ > Behavior: The system handler (C++) for `SpatialViewDefinition` requires a valid `ModelSelector` reference.
359
+ The restrictions of the superclass also apply.
360
+
361
+ ### ModelSelector
362
+
363
+ > Behavior: The system handler restricts deletion. A `ModelSelector` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `ModelSelector` is no longer referenced.
364
+
365
+ ### CategorySelector
366
+
367
+ > Behavior: The system handler restricts deletion. A `CategorySelector` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `CategorySelector` is no longer referenced.
368
+
369
+ ### DisplayStyle
370
+
371
+ > Behavior: The system handler restricts deletion. A `DisplayStyle` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `DisplayStyle` is no longer referenced.
372
+
373
+ ### BaseModelForView2d
374
+
375
+ See [ViewDefinition2d.BaseModel ECNavigationProperty](#ViewDefinition2d) ECNavigationProperty
376
+
377
+ ### SpatialViewDefinitionUsesModelSelector
378
+
379
+ See [SpatialViewDefinition.ModelSelector ECNavigationProperty](#SpatialViewDefinition) ECNavigationProperty
380
+
381
+ ### ViewDefinitionUsesCategorySelector
382
+
383
+ See [ViewDefinition.CategorySelector ECNavigationProperty](#ViewDefinition) ECNavigationProperty
384
+
385
+ ### ViewDefinitionUsesDisplayStyle
386
+
387
+ See [ViewDefinition.DisplayStyle ECNavigationProperty](#ViewDefinition) ECNavigationProperty
388
+
389
+ ### CustomHandledProperty
390
+
391
+ See [CustomHandledPropertyStatementType](#CustomHandledPropertyStatementType).
392
+
393
+ ### ChannelRootAspect
394
+
395
+ Applications create channels to define portions of the model-hierarchy that they "own".
396
+
397
+ 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`.
398
+
399
+ 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`.
400
+
401
+ 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*.
402
+
403
+ See [Channels](https://www.itwinjs.org/learning/backend/channel/) for more information on the topic.
404
+
405
+ ### DefinitionSet
406
+
407
+ `DefinitionSet` represents a set of `DefinitionElement`s. The set may be exclusive (`DefinitionContainer` owns its `DefinitionElement`s) or may be non-exclusive (`DefinitionGroup` does not own its `DefinitionElement`s). `DefinitionSet` should *only* be *directly* subclassed by `DefinitionGroup` and `DefinitionContainer`. `DefinitionGroup` and `DefinitionContainer` may be further subclassed.
408
+
409
+ References to `DefinitionSet`s will generally treat the `DefinitionSet`s recursively. If *`DefinitionSet` A* contains *`DefinitionSet` B* and *`DefinitionSet` C*, the members of *`DefinitionSet` B* and *`DefinitionSet` C* will be considered to be first class members of *`DefinitionSet` A* (effectively they will be considered as peers of the `DefinitionElement`s that are directly contained in *`DefinitionSet` A*). This recursive interpretation extends through the full depth of nested `DefinitionSet`s.
410
+
411
+ ### DefinitionGroup
412
+
413
+ `DefinitionGroup` is intended for defining non-exclusive sets of `DefinitionElement`s (a `DefinitionElement` may be in multiple `DefinitionGroup`s). `DefinitionGroup` holds its `DefinitionElement`s through the `DefinitionGroupGroupsDefinitions` relationship. The referenced `DefinitionElement`s may be contained in the same `DefinitionModel` as the `DefinitionGroup` or may be contained in other `DefinitionModel`s.
414
+
415
+ See `DefinitionSet` documentation for recursive interpretations of `DefinitionSet`s containing `DefinitionSet`s.
416
+
417
+ Care must be taken to avoid circular references. Note that even a single `DefinitionGroup` can create circular references in two cases:
418
+
419
+ - The `DefinitionGroup` directly contains itself.
420
+ - The `DefinitionGroup` contains a `DefinitionContainer` that directly or indirectly contains the `DefinitionGroup`.
421
+
422
+ ### DefinitionContainer
423
+
424
+ `DefinitionContainer` represents a `DefinitionSet` that exclusively owns its `DefinitionElement`s. The exclusivity is only effective relative to other `DefinitionContainer`s (or similar `DefinitionElement`s that have sub-models); the `DefinitionElement`s that are contained in a `DefinitionContainer` may also be in one or more `DefinitionGroup`s.
425
+
426
+ See `DefinitionSet` documentation for recursive interpretations of `DefinitionSet`s containing `DefinitionSet`s.
427
+
428
+ A `DefinitionContainer` can conceptually be thought of as a *folder of definitions*.
429
+ A `DefinitionContainer` is recommended when there is a standard set of domain-specific definitions that must be known to domain software applications.
430
+ In this case, the `DefinitionContainer` should be contained by the `DictionaryModel` and found by the software via a known `Code`.
431
+
432
+ ### DefinitionGroupGroupsDefinitions
433
+
434
+ A `DefinitionGroup` may not be both the source and the target of the same relationship instance.
435
+
436
+ ### PhysicalSystem
437
+
438
+ A non-exclusive set of `SpatialElements` grouped using the `PhysicalSystemGroupsMembers` relationship. A `SpatialElement` can be a member of multiple `PhysicalSystems`.
439
+
440
+ The primary contents of the `PhysicalSystem` are `PhysicalElements`, but `SpatialLocationElements` can be included, as well.
441
+
442
+ The hierarchy of `PhysicalSystem`s is built using the [PhysicalSystemAggregatesSubSystems](#physicalsystemaggregatessubsystems) relationship, similar to [IfcRelAggregates](https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/schema/ifckernel/lexical/ifcrelaggregates.htm). The "source" Element of the relationship is an "Aggregator" that aggregates parts that are essentially a different representation of the aggregator, but at a finer granularity.
443
+
444
+ A Physical System can define as many levels of hierarchy as needed.
445
+
446
+ ### SynchronizationConfigLink
447
+
448
+ A Link to the Configuration for a Synchronization Job. By convention, a unique Id for the SynchronizationConfigLink such as a job Id should be set in the `CodeValue` property and a name should be set in in the UserLabel property.
449
+
450
+ ### ExternalSourceGroup
451
+
452
+ If the `ExternalSourceGroup` has a *primary* repository than it should be persisted in the `Repository` property from its base class.
453
+ If the group does not have a *primary* repository than that property should be left as `NULL`.
454
+
455
+ ### GeometricModel2d
456
+
457
+ > Behavior: The system handler (C++) for `GeometricModel2d` will prevent `GeometricElement3d` instances from being inserted to ensure that the model will only contain 2d geometry.
458
+ This restriction applies to all `GeometricModel2d` subclasses.
459
+ `InformationContentElement` instances (other than `DefinitionElement` subclasses) can also be inserted into a `GeometricModel2d`.
460
+
461
+ ### GeometricElement2d
462
+
463
+ > Behavior: The system handler (C++) for `GeometricElement2d` will only permit instances to be inserted into a `GeometricModel2d` and will require its `Category` property to reference a `DrawingCategory`.
464
+ The system handler also requires a valid *placement* if `GeometryStream` is not `NULL`.
465
+
466
+ See [GeometryStream](../../learning/common/geometrystream/) for a more in-depth explanation about that property.
467
+
468
+ ### DrawingModel
469
+
470
+ > Behavior: The system handler (C++) for `DrawingModel` ensures that the *modeled element* for a `DrawingModel` is a `Drawing` or a `TemplateRecipe2d`.
471
+ The restrictions from the `GeometricModel2d` superclass also apply.
472
+
473
+ ### GeometricModel3d
474
+
475
+ > Behavior: The system handler (C++) for `GeometricModel3d` will prevent `GeometricElement2d` instances from being inserted to ensure that the model will only contain 3d geometry.
476
+ This restriction applies to all `GeometricModel3d` subclasses.
477
+ `InformationContentElement` instances (other than `DefinitionElement` subclasses) can also be inserted into a `GeometricModel3d`.
478
+
479
+ ### GeometricElement3d
480
+
481
+ > Behavior: The system handler (C++) for `GeometricElement3d` will only permit instances to be inserted into a `GeometricModel3d` and will require its `Category` property to reference a `SpatialCategory`.
482
+ The system handler also requires a valid *placement* if `GeometryStream` is not `NULL`.
483
+
484
+ See [GeometryStream](../../learning/common/geometrystream/) for a more in-depth explanation about that property.
485
+
486
+ ### SpatialLocationModel
487
+
488
+ > Behavior: The system handler (C++) for `SpatialLocationModel` will prevent `PhysicalElement` instances from being inserted since the primary intent is for the model to contain `SpatialLocationElement` instances.
489
+ `InformationContentElement` instances (other than `DefinitionElement` subclasses) can also be inserted into a `SpatialLocationModel`.
490
+ The restrictions from the `GeometricModel3d` superclass also apply.
491
+
492
+ ### InformationModel
493
+
494
+ > Behavior: The system handler (C++) for `InformationModel` will only permit the insertion of `InformationContentElement` instances.
495
+ This restriction applies to all `InformationModel` subclasses.
496
+
497
+ ### DefinitionModel
498
+
499
+ > Behavior: The system handler (C++) for `DefinitionElement` will only permit instances to be inserted into a `DefinitionModel`.
500
+ Other `InformationContentElement` instances can also be inserted into a `DefinitionModel`.
501
+
502
+ ### DefinitionElement
503
+
504
+ > Behavior: The system handler (C++) for `DefinitionElement` will only permit instances to be inserted into a `DefinitionModel`.
505
+
506
+ ### RepositoryModel
507
+
508
+ > Behavior: The singleton `RepositoryModel` behaves like a standard `InformationModel` and should have been a direct subclass of `InformationModel`. Unfortunately, it subclasses from `DefinitionModel` for legacy reasons that are no longer relevant.
509
+ However, the system handler (C++) for `RepositoryModel` makes it act like a direct subclass of `InformationModel`.
510
+ Consistent with a standard `InformationModel`, all `InformationContentElement` instances except `DefinitionElement` subclasses may be inserted.
511
+ For backwards compatibility reasons, the superclass of `RepositoryModel` cannot be corrected until a major schema version upgrade.
512
+
513
+ ### GroupInformationModel
514
+
515
+ > Behavior: The system handler (C++) for `GroupInformationModel` will only permit the insertion of `GroupInformationElement` instances.
516
+ The *modeled element* for an `GroupInformationModel` is expected to be an `GroupInformationPartition`.
517
+
518
+ ### LinkModel
519
+
520
+ > Behavior: The system handler (C++) for `LinkModel` will only permit the insertion of `LinkElement` instances.
521
+ The *modeled element* for an `LinkModel` is expected to be a `LinkPartition`.
522
+
523
+ ### InformationRecordModel
524
+
525
+ > Behavior: The system handler (C++) for `InformationRecordModel` will only permit the insertion of `InformationRecordElement` instances.
526
+ The *modeled element* for an `InformationRecordModel` is expected to be an `InformationRecordPartition`.
527
+
528
+ ### DocumentListModel
529
+
530
+ > Behavior: The system handler (C++) for `DocumentListModel` will only permit the insertion of `Document` instances.
531
+ The *modeled element* for a `DocumentListModel` is expected to be a `DocumentPartition`.
532
+
533
+ ### RoleModel
534
+
535
+ > Behavior: The system handler (C++) for `RoleModel` prevents `GeometricElement` instances from being inserted since the primary intent is for a `RoleModel` to contain `RoleElement` instances.
536
+ `InformationContentElement` instances (other than `DefinitionElement` subclasses) can also be inserted into a `RoleModel`.
537
+ This behavior applies to all `RoleModel` subclasses.
538
+ `FunctionalModel` (from the `Functional` schema) is the most widely known subclass of `RoleModel`.
539
+
540
+ ### RoleElement
541
+
542
+ An Entity is modeled as a `bis:RoleElement` when a set of external circumstances define an important role (one that is worth tracking) that is not intrinsic to the Entity playing the role. For example, a person can play the role of a teacher or a rock can play the role of a boundary marker.
543
+
544
+ > Behavior: The system handler (C++) for `RoleElement` will only permit instances to be inserted into a `RoleModel`.
545
+ This behavior applies to all `RoleElement` subclasses.
546
+ `FunctionalElement` (from the `Functional` schema) is the most widely known subclass of `RoleElement`.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bentley/bis-core-schema",
3
3
  "license": "MIT",
4
- "version": "1.0.17-dev.4",
4
+ "version": "1.0.17-dev.5",
5
5
  "homepage": "https://www.itwinjs.org/",
6
6
  "keywords": [
7
7
  "Bentley",