Required schema specification

TypeScript type: RequiredSchemaSpecification.

Presentation rules may need to be modified as different ECSchemas evolve - new classes and properties may be added and they may require adding additional rules, or, after a major schema release, some classes or properties may even get removed, in which case some rules may need to also be removed or adjusted.

In any case, the rules are not tightly bound to the ECSchema used by an iModel - an application that knows about schema X version 2 will still want to open older iModels that use schema X version 1. This introduces a need to define not only schemas used by the ruleset as a whole, but to define them at rule level, and with ability to specify which version of schema is required for specific rules.

This specification is designed specifically for that purpose. It accepts a list of ECSchema names along with optional minimum required and maximum allowed versions.

Attributes

Name Required? Type Default
name Yes string
minVersion No string undefined
maxVersion No string undefined

Attribute: name

Specifies the schema to whom the requirement is being set.

Type string
Is Required Yes

Attribute: minVersion

Minimum required schema version (inclusive). Format: {read version}.{write version}.{minor version}, e.g. 2.1.15.

Type string
Is Required No
Default Value undefined

Attribute: maxVersion

Maximum allowed schema version (exclusive). Format: {read version}.{write version}.{minor version}, e.g. 2.1.15.

Type string
Is Required No
Default Value undefined

Examples

Specifying required schemas for the ruleset

The below ruleset contains a content modifier for Functional.FunctionalElement class - we need to make sure the iModel supports all the ECSchemas that are used in it.

{
  "id": "my-ruleset",
  "requiredSchemas": [{
    "name": "Functional"
  }],
  "rules": [{
    "ruleType": "ContentModifier",
    "class": { "schemaName": "Functional", "className": "FunctionalElement" },
    // ... some overrides for Functional.FunctionalElement
  }]
}

Specifying required schema in a hierarchy rule

// The ruleset has one root node rule that returns `bis.ExternalSourceAspect` instances. The
// ECClass was introduced in BisCore version 1.0.2, so the rule needs a `requiredSchemas` attribute
// to only use the rule if the version meets the requirement.
const ruleset: Ruleset = {
  id: "example",
  rules: [
    {
      ruleType: "RootNodes",
      requiredSchemas: [{ name: "BisCore", minVersion: "1.0.2" }],
      specifications: [
        {
          specType: "InstanceNodesOfSpecificClasses",
          classes: [
            {
              schemaName: "BisCore",
              classNames: ["ExternalSourceAspect"],
            },
          ],
        },
      ],
    },
  ],
};

Specifying required schema in content modifier

// The ruleset has a content rule that returns content of given input instances. There's also
// a content modifier that tells us to load `bis.ExternalSourceAspect` related properties, but the
// ECClass was introduced in BisCore version 1.0.2, so the modifier needs a `requiredSchemas` attribute
// to only use the rule if the version meets the requirement.
const ruleset: Ruleset = {
  id: "example",
  rules: [
    {
      ruleType: "Content",
      specifications: [
        {
          // load content for given input instances
          specType: "SelectedNodeInstances",
        },
      ],
    },
    {
      ruleType: "ContentModifier",
      requiredSchemas: [{ name: "BisCore", minVersion: "1.0.2" }],
      class: { schemaName: "BisCore", className: "ExternalSourceAspect" },
      relatedProperties: [
        {
          // request to include properties of related ExternalSourceAspect instances
          propertiesSource: {
            relationship: { schemaName: "BisCore", className: "ElementOwnsMultiAspects" },
            direction: "Forward",
            targetClass: { schemaName: "BisCore", className: "ExternalSourceAspect" },
          },
        },
      ],
    },
  ],
};

Last Updated: 15 May, 2024