BIS Schema Validation

The variability and potential magnitude of schema rules lead to the need for quality control and long-term maintainability over BIS schemas.

BIS uses EC v3

BIS is defined using EC v3. EC v3 is a more clearly defined and rigorous version of the EC that has been used widely in Bentley over the past 10+ years.

BIS is modularized into a set of interrelated domains (each expressed in a separate ECSchema) that are consistent, coordinated and constrained to maximize the functionality of the entire BIS-based ecosystem. Some flexibility that is available in "raw" EC is not available in BIS. For example, all ECClasses defined in domain ECSchemas (other than BisCore itself) are required to sub-class from some ECClass in BisCore. Other BIS rules are documented at BIS Schema Validation.

Unless noted otherwise, all references to “schema”, “class” and “property” in this document refer to ECSchema, ECClass and ECProperty.

Validation Rules

BIS Schemas are validated against a set of rules. If one rule is violated, the whole schema will fail validation.

The rules are broken into the different parts of the Schema they are validated against.

General (Schema) Rules

BIS-001

A schema must load and pass EC3.1 spec validation. XXXX NEED LINK

BIS-002

A schema's ECXML version must be at least, 3.1.

BIS-003

A schema may not reference any EC2 or EC3.0 schemas.

BIS-004

A schema must specify a three-part version number

  • The version number must be in the format RR.WW.mm (that is, Read.Write.Minor).
  • Each version component must be zero-padded to two digits (e.g. 01.02.00).

BIS-005

A schema reference must specify a three-part version number (in the same format described above).

BIS-006

If the schema contains 'dynamic' (case-insensitive) in its name it must apply the CoreCA:DynamicSchema custom attribute.

BIS-007

Classes within the same schema cannot have the same display label.

BIS-008

A schema should not reference a deprecated schema.

BIS-009

An alias in the schema reference must be the same as the alias defined by the schema.

Class Rules

BIS-100

Properties within the same class and category cannot have the same display label.

BIS-101

Classes not within the BisCore, Functional, or Generic schema cannot applied bis:ClassHasHandler.

BIS-102

Class should not derive from a deprecated class.

BIS-103

Class should not have deprecated properties.

BIS-104

Class should not have properties which are of deprecated struct types.

BIS-105

Classes should not use custom attributes that are deprecated.

Custom Attribute Classes

BIS-400

Custom Attribute classes must not have base classes.

Entity Class Rules

BIS-600

Entity classes must derive from the BIS hierarchy.

BIS-601

Entity classes may only derive from one base Entity class.

BIS-602

Entity classes may not inherit a property from more than one base class.

BIS-603

A mixin property cannot override an Entity property inherited from a base Entity class.

BIS-604

If any aspect (ECClass which derives from bis:ElementMultiAspect) exists, there must be a relationship that derives from the bis:ElementOwnsMultiAspects relationship with this class supported as a target constraint.

  • Treated as warning if the schema has the CoreCA:DynamicSchema CA applied.

BIS-605

If any aspect (ECClass which derives from bis:ElementUniqueAspect) exists, there must be a relationship that derives from the bis:ElementOwnsUniqueAspect relationship with this class supported as a target constraint.

  • Treated as warning if the schema has the CoreCA:DynamicSchema CA applied.

BIS-606

Entity classes cannot implement both bis:IParentElement and bis:ISubModeledElement.

BIS-607

Entity classes cannot subclass the following classes:

  • bis:PhysicalModel
  • bis:SpatialLocationModel
  • bis:GroupInformationModel
  • bis:InformationRecordModel
  • bis:DefinitionModel
    • bis:DictionaryModel and bis:RepositoryModel are the only classes allowed to subclass bis:DefinitionModel
  • bis:DocumentListModel
  • bis:LinkModel

BIS-608

Property overrides cannot change the persistence unit.

BIS-609

Subclasses of bis:Model cannot have additional properties defined outside of BisCore.

BIS-610

Entity classes may not subclass deprecated classes.

BIS-611

Entity classes should not derive from deprecated mixin classes.

KindOfQuantities

BIS-1000

Kind Of Quantities must not use 'PERCENTAGE' or other unitless ratios.

BIS-1001

Kind Of Quantities must use an SI Unit for their persistence unit.

BIS-1002

Kind Of Quantities must not have duplicate presentation format.

Mixin Rules

BIS-1100

Mixin classes may not override an inherited property.

Properties

BIS-1300

Properties should not be of type long. These properties should be navigation properties if they represent a FK or be of type int or double if they represent a number.

BIS-1301

Properties within the same class and category cannot have the same display label.

BIS-1302

Properties must use the following supported ExtendedTypes:

  • BeGuid
  • GeometryStream
  • Json

BIS-1303

Properties must not use CustomAttribute bis:CustomHandledProperty unless CustomAttribute bis:ClassHasHandler is defined on their parent class (not derived from a base class).

Relationship Classes

BIS-1500

Relationship classes must not use the holding strength.

BIS-1501

Relationship classes must not have a source constraint multiplicity upper bound greater than 1 if the strength is embedding and the direction is forward.

BIS-1502

Relationship classes must not have a target constraint multiplicity upper bound greater than 1 if the strength is embedding and the direction is backward.

BIS-1503

Relationship classes must not have an abstract constraint if there is only one concrete constraint set.

BIS-1504

Relationship classes must not have an bis:ElementAspect target constraint (or source constraint if direction is backwards), unless they derive from bis:ElementOwnsUniqueAspect or bis:ElementOwnsMultiAspects.

BIS-1505

Embedding relationships should not have 'Has' in the class name.

BIS-1506

Relationship Constraint should not use a deprecated class or mixin as a constraint class.

BIS-1507

Relationship Constraint should not use a deprecated class or mixin as an abstract constraint.

BIS-1508

Relationship Constraint should not use constraint classes which derives from a deprecated base class or deprecated mixin classes.

BIS-1509

Relationship Constraint should not use abstract constraint which derives from a deprecated base class or deprecated mixin classes.

Struct Classes

BIS-1700

Struct classes must not have base classes.


Next: BIS Glossary

Last Updated: 20 September, 2019