<?xml version="1.0" encoding="UTF-8"?>
<!-- ==================================================================================
|  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|  * See LICENSE.md in the project root for license terms and full copyright notice.
======================================================================================= -->
<ECSchema schemaName="BisCore" alias="bis" version="01.00.25" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2" displayLabel="BIS Core" description="The BIS core schema contains classes that all other domain schemas extend.">

    <ECSchemaReference name="CoreCustomAttributes" version="01.00.03" alias="CoreCA"/>
    <ECSchemaReference name="BisCustomAttributes" version="01.00.00" alias="bisCA"/>
    <ECSchemaReference name="ECDbMap" version="02.00.02" alias="ecdbmap"/>
    <ECSchemaReference name="ECDbSchemaPolicies" version="01.00.00" alias="ecdbpol"/>

    <ECCustomAttributeClass typeName="SchemaHasBehavior" appliesTo="Schema" description="Applied to an ECSchema to indicate that there is an associated JavaScript library that will provide run-time behavior.">
        <ECArrayProperty propertyName="Restrictions" typeName="string" description="List of actions that are not permitted when the associated JavaScript library is not available." minOccurs="0" maxOccurs="unbounded"/>
    </ECCustomAttributeClass>

    <ECCustomAttributes>
        <ProductionStatus xmlns="CoreCustomAttributes.01.00.03">
            <SupportedUse>Production</SupportedUse>
        </ProductionStatus>
        <SchemaLayerInfo xmlns="BisCustomAttributes.01.00.00">
            <Value>Core</Value>
        </SchemaLayerInfo>
        <NoAdditionalRootEntityClasses xmlns="ECDbSchemaPolicies.01.00.00"/>
        <NoAdditionalForeignKeyConstraints xmlns="ECDbSchemaPolicies.01.00.00">
            <Exceptions>
                <string>Functional:FunctionalElement.TypeDefinition</string>
            </Exceptions>
        </NoAdditionalForeignKeyConstraints>
        <NoAdditionalLinkTables xmlns="ECDbSchemaPolicies.01.00.00"/>
        <SchemaHasBehavior xmlns="BisCore.01.00.00"/>
        <ImportRequiresVersion xmlns="ECDbMap.02.00.02">
            <ECDbRuntimeVersion>4.0.0.5</ECDbRuntimeVersion>
        </ImportRequiresVersion>
    </ECCustomAttributes>
    
    <!-- Applied to an ECClass to reserve a list of properties that cannot be used by that class or its derived classes. -->
    <ECCustomAttributeClass typeName="ReservedPropertyNames" modifier="Sealed" appliesTo="EntityClass,RelationshipClass"
                            description="Declare a list of properties as reserved. The property name listed would be forbidden from use in the class and classes that inherit from it.">
        <ECArrayProperty propertyName="PropertyNames" typeName="string" minOccurs="0" maxOccurs="unbounded" description="An array of names of properties that should not be used. Case-insensitive comparison will be used."/>
    </ECCustomAttributeClass>

    <!-- Applied to an ECClass to indicate that a C++ subclass of DgnDomain::Handler will supply behavior for it at run-time.
         This custom attribute may only be used by BisCore or other core schemas. Other schemas should use the SchemaHasBehavior instead.
         It must be applied to any ECClass if the application/domain registers a Handler for that ECClass.
         It should not be applied to any other ECClass.
         It is an error to call RegisterHandler() with a handler for an ECClass that lacks this custom attribute. -->
    <ECCustomAttributeClass typeName="ClassHasHandler" description="Applied to an ECClass to indicate that a C++ subclass of DgnDomain::Handler will supply behavior for it at run-time. This custom attribute may only be used by BisCore or other core schemas." appliesTo="Any">
        <!-- Defines a list of names of actions that are prohibited when the associated handler is not available (e.g., because the DgnDomain is not loaded).
                Restrictions are inherited from superclasses; a subclass can only be as or more restrictive than its superclass, never less. -->
        <ECArrayProperty propertyName="Restrictions" typeName="string" description="List of actions that are not permitted when the associated handler is not available" minOccurs="0" maxOccurs="unbounded"/>
    </ECCustomAttributeClass>

    <ECEnumeration typeName="CustomHandledPropertyStatementType" backingTypeName="int" isStrict="true" description="Restrictions that may be applied to a CustomHandledProperty. Must match the ECSqlClassParams::StatementType enum">
        <ECEnumerator value="0" name="None" displayLabel="None"/>
        <ECEnumerator value="1" name="Select" displayLabel="Select"/>
        <ECEnumerator value="2" name="Insert" displayLabel="Insert"/>
        <ECEnumerator value="3" name="ReadOnly" displayLabel="ReadOnly = Select|Insert"/>
        <ECEnumerator value="4" name="Update" displayLabel="Update"/>
        <ECEnumerator value="6" name="InsertUpdate" displayLabel="InsertUpdate = Insert | Update"/>
        <ECEnumerator value="7" name="All" displayLabel="All = Select | Insert | Update"/>
    </ECEnumeration>

    <ECCustomAttributeClass typeName="CustomHandledProperty" description="Applied to an element's property to indicate that the property's value is handled specially by a C++ class. Can only be applied to properties of ECClasses that specify ClassHasHandler." appliesTo="AnyProperty">
      <ECProperty propertyName="StatementTypes" typeName="CustomHandledPropertyStatementType" description="Indicates the statement types that are relevant for a particular custom-handled property."/>
    </ECCustomAttributeClass>

    <!-- Restrictions that may be applied to an AutoHandledProperty. Must match the ECSqlClassParams::StatementType enum -->
    <ECEnumeration typeName="AutoHandledPropertyStatementType" backingTypeName="int" isStrict="true">
        <ECEnumerator value="3" name="ReadOnly" displayLabel="ReadOnly = Select|Insert"/>
        <ECEnumerator value="7" name="All" displayLabel="All = Select | Insert | Update"/>
    </ECEnumeration>

    <!-- Rank enum introduced as not-strict for backwards compatibility -->
    <ECEnumeration typeName="DefinitionElementRank" backingTypeName="int" isStrict="false">
        <ECEnumerator value="0" name="System" displayLabel="System"/>
        <ECEnumerator value="1" name="Domain" displayLabel="Domain"/>
        <ECEnumerator value="2" name="Application" displayLabel="Application"/>
        <ECEnumerator value="3" name="User" displayLabel="User"/>
    </ECEnumeration>

    <ECCustomAttributeClass typeName="AutoHandledProperty" description="Applied to an element's property to indicate that select, update, and insert of the property's value are handled automatically by the platform." appliesTo="AnyProperty">
        <ECProperty propertyName="StatementTypes" typeName="AutoHandledPropertyStatementType" description="Indicates the statement types that are relevant for a particular auto-handled property." />
    </ECCustomAttributeClass>

    <!-- ////////////////////////////////////////////////////////////////////////////// -->
    <!-- // BIS-related core classes -->
    <!-- ////////////////////////////////////////////////////////////////////////////// -->
    <ECEntityClass typeName="CodeSpec" modifier="Sealed" displayLabel="Code Specification" description="A bis:CodeSpec (code specification) captures the rules for encoding and decoding significant business information into and from a Code (string). This specification is used to generate and validate Codes.">
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Name" typeName="string" description="The unique name of the bis:CodeSpec. A best practice is to incorporate the schema alias or domain name into the bis:CodeSpec name to ensure uniqueness.">
            <ECCustomAttributes>
                <PropertyMap xmlns="ECDbMap.02.00.00">
                    <Collation>NoCase</Collation>
                    <IsNullable>False</IsNullable>
                    <IsUnique>True</IsUnique>
                </PropertyMap>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="JsonProperties" typeName="string" extendedTypeName="Json" description="A JSON string containing scope and fragment specifications used to generate and validate code values"/>
    </ECEntityClass>

    <ECRelationshipClass typeName="CodeSpecSpecifiesCode" strength="referencing" modifier="Sealed">
        <!-- @see Element.CodeSpec ECNavigationProperty -->
        <Source multiplicity="(1..1)" roleLabel="specified code for" polymorphic="true">
            <Class class="CodeSpec"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="code is specified by" polymorphic="true">
            <Class class="Element"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="ElementScopesCode" strength="referencing" modifier="Sealed">
        <!-- @see Element.CodeScope ECNavigationProperty -->
        <Source multiplicity="(1..1)" roleLabel="scopes code for" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="code is scoped by" polymorphic="true">
            <Class class="Element"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="Model" modifier="Abstract" description="A bis:Model is a container for persisting a collection of related elements.">
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00">
                <Restrictions>
                    <string>Clone</string><!-- It is never permitted to clone a model without its handler -->
                </Restrictions>
            </ClassHasHandler>
            <ClassMap xmlns="ECDbMap.02.00.00">
                <MapStrategy>TablePerHierarchy</MapStrategy>
            </ClassMap>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03"/>
            <ReservedPropertyNames xmlns="BisCore.01.00.00">
                <PropertyNames>
                    <string>Id</string>
                    <string>ClassName</string>
                    <string>ClassFullName</string>
                </PropertyNames>
            </ReservedPropertyNames>
        </ECCustomAttributes>
        <ECNavigationProperty propertyName="ParentModel" relationshipName="ModelOwnsSubModel" direction="backward" readOnly="true" displayLabel="Parent Model" description="The parent bis:Model contains the bis:Element that this bis:Model is sub-modeling.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00">
                    <!-- Creates the ParentModelId foreign key column in the bis_Model table -->
                    <OnDeleteAction>NoAction</OnDeleteAction>
                </ForeignKeyConstraint>
            </ECCustomAttributes>
        </ECNavigationProperty>
        <ECNavigationProperty propertyName="ModeledElement" relationshipName="ModelModelsElement" direction="forward" readOnly="true" displayLabel="Modeled Element" description="The bis:Element that this bis:Model is sub-modeling. This bis:Model models the same Entity as the sub-Modeled bis:Element, but at a finer granularity.">
            <ECCustomAttributes>
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00">
                    <!-- Creates the ModeledElementId foreign key column in the bis_Model table -->
                    <OnDeleteAction>NoAction</OnDeleteAction>
                </ForeignKeyConstraint>
            </ECCustomAttributes>
        </ECNavigationProperty>
        <ECProperty propertyName="IsPrivate" typeName="boolean" displayLabel="Is Private" description="If IsPrivate is true then this bis:Model should not appear in lists shown to the user.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="IsTemplate" typeName="boolean" displayLabel="Is Template" description="If IsTemplate is true then this bis:Model is used as a template for creating new instances.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="JsonProperties" typeName="string" extendedTypeName="Json" displayLabel="JSON Properties" description="A string property that users and/or applications can use to persist ad hoc JSON values.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="LastMod" typeName="dateTime" displayLabel="Last Modified" description="The last time any element in this Model was modified.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16">
                    <StatementTypes>0</StatementTypes>
                </CustomHandledProperty>
                <DateTimeInfo xmlns="CoreCustomAttributes.01.00.03">
                    <DateTimeKind>Utc</DateTimeKind>
                </DateTimeInfo>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
       </ECProperty>
    </ECEntityClass>
    <ECEntityClass typeName="GeometricModel" modifier="Abstract" displayLabel="Geometric Model" description="A container for persisting bis:GeometricElement instances.">
        <BaseClass>Model</BaseClass>
        <ECCustomAttributes>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03"/>
        </ECCustomAttributes>
       <ECProperty propertyName="GeometryGuid" typeName="binary" extendedTypeName="BeGuid" displayLabel="Geometry GUID" description="A GUID that changes whenever any element in this GeometricModel has a change to its geometry.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
       </ECProperty>
    </ECEntityClass>
    <ECEntityClass typeName="GeometricModel3d" modifier="Abstract" displayLabel="3D Geometric Model" description="A container for persisting bis:GeometricElement3d instances, which are considered to be in the iModel's real-world coordinate system unless their InSpatialIndex property has been set to 'false'.">
        <BaseClass>GeometricModel</BaseClass>
        <ECProperty propertyName="IsNotSpatiallyLocated" typeName="boolean" displayLabel="Is Not Spatially Located" description="If IsNotSpatiallyLocated is true, then the elements in this bis:GeometricModel3d are not in real-world coordinates and will not be in the spatial index.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="IsPlanProjection" typeName="boolean" displayLabel="Is Plan Projection" description="If IsPlanProjection is true, then the elements in this bis:GeometricModel3d are expected to be in an XY plane.">
        </ECProperty>
    </ECEntityClass>
    <ECEntityClass typeName="GeometricModel2d" modifier="Abstract" displayLabel="2D Geometric Model" description="A container for persisting bis:GeometricElement2d instances.">
        <BaseClass>GeometricModel</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="GlobalOrigin" typeName="point2d" displayLabel="Global Origin" description="The actual coordinates of (0,0) in modeling coordinates. An offset applied to all modeling coordinates."/>
    </ECEntityClass>
    <ECEntityClass typeName="GraphicalModel2d" modifier="Abstract" displayLabel="2D Graphical Model" description="A container for persisting bis:GraphicalElement2d instances.">
        <BaseClass>GeometricModel2d</BaseClass>
    </ECEntityClass>
    <ECEntityClass typeName="GraphicalModel3d" modifier="Abstract" displayLabel="3D Graphical Model" description="A container for persisting bis:GraphicalElement3d instances.">
        <BaseClass>GeometricModel3d</BaseClass>
    </ECEntityClass>
    <ECEntityClass typeName="SpatialModel" modifier="Abstract" displayLabel="Spatial Model" description="An abstract base class for bis:PhysicalModel and bis:SpatialLocationModel--the only two types of model for real physical space. Other GeometricModel3d specializations use the real-world coordinate system, but are considered as informational or mathematical abstractions.">
        <BaseClass>GeometricModel3d</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="PhysicalModel" displayLabel="Physical Model" description="A container for persisting bis:PhysicalElement and bis:SpatialLocationElement instances used to model real physical space. Also allows bis:GraphicalElement3d and bis:InformationContentElement.">
        <BaseClass>SpatialModel</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="SpatialLocationModel" displayLabel="Spatial Location Model" description="A container for persisting bis:SpatialLocationElement instances. Also allows bis:GraphicalElement3d and bis:InformationContentElement.">
        <BaseClass>SpatialModel</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="DrawingModel" displayLabel="Drawing Model" description="A container for persisting bis:DrawingGraphic elements. ">
        <BaseClass>GraphicalModel2d</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="SectionDrawingModel" displayLabel="Section Drawing Model" description="A container for persisting section bis:DrawingGraphic elements representing a cross-section of a PhysicalModel. Generally at the same scale as the sectioned geometry to allow it to be display in situ at the location of the sectioning.">
        <BaseClass>DrawingModel</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="SheetModel" displayLabel="Sheet Model" description="A container for persisting sheet views and graphics.">
        <BaseClass>GraphicalModel2d</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="RoleModel" displayLabel="Role Model" description="A container for persisting bis:RoleElement instances. This class should be considered abstract, so the appropriate subclass of bis:RoleModel should be used instead.">
        <!-- Note: Should be considered abstract, but is concrete for legacy/compatibility reasons. -->
        <BaseClass>Model</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="InformationModel" modifier="Abstract" displayLabel="Information Model" description="A container for persisting bis:InformationContentElement instances.">
        <BaseClass>Model</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="GroupInformationModel" modifier="Abstract" displayLabel="Group Information Model" description="A container for persisting bis:GroupInformationElement instances.">
        <BaseClass>InformationModel</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="InformationRecordModel" displayLabel="Information Record Model" description="A container for persisting bis:InformationRecordElement instances">
        <BaseClass>InformationModel</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="DefinitionModel" displayLabel="Definition Model" description="A container for persisting bis:DefinitionElement instances.">
        <BaseClass>InformationModel</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="RepositoryModel" modifier="Sealed" displayLabel="Repository Model" description="The singleton Model at the root of a BIS repository. Contains a hierarchy of bis:Subject elements that declare what the repository is modeling and child bis:InformationPartitionElement instances that establish Modeling Perspectives. Serves as a high-level table-of-contents for the BIS repository.">
        <!-- Note: Should have directly subclassed from bis:InformationModel. Has the behavior of a standard InformationModel, not a DefinitionModel. -->
        <BaseClass>DefinitionModel</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="DocumentListModel" displayLabel="Document List" description="A container for persisting bis:Document elements.">
        <BaseClass>InformationModel</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="LinkModel" displayLabel="Link Model" description="A container for persisting bis:LinkElement instances.">
        <BaseClass>InformationModel</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="DictionaryModel" modifier="Sealed" displayLabel="Dictionary Model" description="The singleton container for repository-global bis:DefinitionElement instances.">
        <BaseClass>DefinitionModel</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="WebMercatorModel" displayLabel="Web Mercator Model" description="DEPRECATED. Not used.">
        <BaseClass>SpatialModel</BaseClass>
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>Instances of WebMercatorModel are no longer created.</Description>
            </Deprecated>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECRelationshipClass typeName="ModelOwnsSubModel" strength="embedding" modifier="Sealed" description="This relationship is essentially redundant with the combination of bis:ModelModelsElement and bis:ModelContainsElements. This 'shortcut' exists to support a model hierarchy index for performance reasons.">
        <!-- @see Model.ParentModel ECNavigationProperty -->
        <Source multiplicity="(0..1)" roleLabel="owns sub" polymorphic="true">
            <Class class="Model"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by parent" polymorphic="true">
            <Class class="Model"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="ModelContainsElements" strength="embedding" modifier="Sealed" description="The relationship that enforces that each bis:Element belongs to exactly one bis:Model.">
        <!-- @see Element.Model ECNavigationProperty -->
        <Source multiplicity="(1..1)" roleLabel="contains" polymorphic="true">
            <Class class="Model"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is contained by" polymorphic="true">
            <Class class="Element" />
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="ISubModeledElement" modifier="Abstract" displayLabel="Sub-Modeled Element" description="An interface that can be mixed-into a bis:Element to indicate that it can be sub-modeled by a finer-grained bis:Model. This interface is mutually exclusive with bis:IParentElement.">
        <ECCustomAttributes>
            <IsMixin xmlns="CoreCustomAttributes.01.00.03">
                <!-- Only subclasses of bis:Element can implement the ISubModeledElement interface -->
                <AppliesToEntityClass>Element</AppliesToEntityClass>
            </IsMixin>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECRelationshipClass typeName="ModelModelsElement" displayLabel="Model Sub-Models Element" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:Model to the bis:Element that it sub-models. The sub-Model models the same Entity as the sub-modeled Element, but at a finer granularity.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="true">
            <Class class="Model"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="ISubModeledElement" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="DefinitionModelBreaksDownDefinitionPartition" displayLabel="DefinitionModel Sub-Models DefinitionPartition" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:DefinitionModel to the bis:DefinitionPartition that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="false">
            <Class class="DefinitionModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="false">
            <Class class="DefinitionPartition" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="DefinitionModelBreaksDownDefinitionContainer" displayLabel="DefinitionModel Sub-Models DefinitionContainer" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:DefinitionModel to the bis:DefinitionContainer that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="false">
            <Class class="DefinitionModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="DefinitionContainer" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="DrawingModelBreaksDownTemplateRecipe2d" displayLabel="DrawingModel Sub-Models TemplateRecipe2d" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:DrawingModel to the bis:TemplateRecipe2d that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="false">
            <Class class="DrawingModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="TemplateRecipe2d" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="PhysicalModelBreaksDownTemplateRecipe3d" displayLabel="PhysicalModel Sub-Models TemplateRecipe3d" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:PhysicalModel to the bis:TemplateRecipe3d that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="false">
            <Class class="PhysicalModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="TemplateRecipe3d" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="SpatialLocationModelBreaksDownTemplateRecipe3dInPlan" displayLabel="SpatialLocationModel Sub-Models TemplateRecipe3dInPlan" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:SpatialLocationModel to the bis:TemplateRecipe3dInPlan that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="false">
            <Class class="SpatialLocationModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="TemplateRecipe3dInPlan" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="DocumentListModelBreaksDownDocumentPartition" displayLabel="DocumentListModel Sub-Models DocumentPartition" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:DocumentListModel to the bis:DocumentPartition that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="false">
            <Class class="DocumentListModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="DocumentPartition" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="GroupInformationModelBreaksDownGroupInformationPartition" displayLabel="DocumentListModel Sub-Models GroupInformationPartition" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:GroupInformationModel to the bis:GroupInformationPartition that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="true">
            <Class class="GroupInformationModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="GroupInformationPartition" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="InformationRecordModelBreaksDownInformationRecordPartition" displayLabel="InformationRecordModel Sub-Models InformationRecordPartition" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:InformationRecordModel to the bis:InformationRecordPartition that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="true">
            <Class class="InformationRecordModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="InformationRecordPartition" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="LinkModelBreaksDownLinkPartition" displayLabel="LinkModel Sub-Models LinkPartition" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:LinkModel to the bis:LinkPartition that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="true">
            <Class class="LinkModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="LinkPartition" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="PhysicalModelBreaksDownPhysicalPartition" displayLabel="PhysicalModel Sub-Models PhysicalPartition" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:PhysicalModel to the bis:PhysicalPartition that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="true">
            <Class class="PhysicalModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="PhysicalPartition" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="GraphicalModel3dBreaksDownGraphicalPartition3d" displayLabel="GraphicalModel3d Sub-Models GraphicalPartition3d" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:GraphicalModel3d to the bis:GraphicalPartition3d that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="true">
            <Class class="GraphicalModel3d"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="GraphicalPartition3d" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="SpatialLocationModelBreaksDownSpatialLocationPartition" displayLabel="SpatialLocationModel Sub-Models SpatialLocationPartition" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:SpatialLocationModel to the bis:SpatialLocationPartition that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="true">
            <Class class="SpatialLocationModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="SpatialLocationPartition" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="PhysicalModelBreaksDownPhysicalPortion" strength="embedding" strengthDirection="backward" modifier="None" description="DEPRECATED">
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>The PhysicalPortion class has been deprecated, so this relationship class is also deprecated.</Description>
            </Deprecated>
        </ECCustomAttributes>
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="breaks down" polymorphic="true">
            <Class class="PhysicalModel"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is sub-modeled by" polymorphic="true">
            <Class class="PhysicalPortion" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="DrawingModelBreaksDownDrawing" displayLabel="DrawingModel Sub-Models Drawing" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:DrawingModel to the bis:Drawing that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="sub-models" polymorphic="true">
            <Class class="DrawingModel"/>
        </Source>
        <Target multiplicity="(1..1)" roleLabel="is sub-modeled by" polymorphic="true">
            <Class class="Drawing" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="SheetModelBreaksDownSheet" displayLabel="SheetModel Sub-Models Sheet" strength="embedding" strengthDirection="backward" modifier="None">
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="sub-models" polymorphic="true">
            <Class class="SheetModel"/>
        </Source>
        <Target multiplicity="(1..1)" roleLabel="is sub-modeled by" polymorphic="true">
            <Class class="Sheet" />
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="ModelBreaksDownRepositoryLink" displayLabel="Model Sub-Models RepositoryLink" strength="embedding" strengthDirection="backward" modifier="None" description="Relates a bis:Model to the bis:RepositoryLink that it sub-models.">
        <!-- @see Model.ModeledElement ECNavigationProperty -->
        <BaseClass>ModelModelsElement</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="models" polymorphic="true">
            <Class class="Model"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is modeled by" polymorphic="true">
            <Class class="RepositoryLink" />
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="Element" modifier="Abstract" description="Most abstract class and smallest individually identifiable building block for modeling Entities in a BIS repository.">
        <!-- NOTE: Only platform can directly subclass from Element. Everyone else should pick the most appropriate superclass. -->
        <!-- NOTE: Element subclasses should drop the "Element" suffix from their name once the concept becomes "user facing" -->
        <ECCustomAttributes>
            <ClassMap xmlns="ECDbMap.02.00.00">
                <MapStrategy>TablePerHierarchy</MapStrategy>
            </ClassMap>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03"/>
            <DbIndexList xmlns="ECDbMap.02.00.00">
                <Indexes>
                    <DbIndex>
                        <Name>ix_bis_Element_FederationGuid</Name>
                        <IsUnique>True</IsUnique>
                        <Properties>
                            <string>FederationGuid</string>
                        </Properties>
                        <Where>IndexedColumnsAreNotNull</Where>
                    </DbIndex>
                    <DbIndex>
                        <Name>ix_bis_Element_Code</Name>
                        <IsUnique>True</IsUnique>
                        <Properties>
                            <string>CodeSpec.Id</string>
                            <string>CodeScope.Id</string>
                            <string>CodeValue</string>
                        </Properties>
                    </DbIndex>
                    <DbIndex>
                        <Name>ix_bis_Element_UserLabel</Name>
                        <IsUnique>False</IsUnique>
                        <Properties>
                            <string>UserLabel</string>
                        </Properties>
                        <Where>IndexedColumnsAreNotNull</Where>
                    </DbIndex>
                </Indexes>
            </DbIndexList>
            <ClassHasCurrentTimeStampProperty xmlns="CoreCustomAttributes.01.00.03">
                <PropertyName>LastMod</PropertyName>
            </ClassHasCurrentTimeStampProperty>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <ReservedPropertyNames xmlns="BisCore.01.00.00">
                <PropertyNames>
                    <string>Id</string>
                    <string>ClassName</string>
                    <string>ClassFullName</string>
                    <string>Code</string>
                </PropertyNames>
            </ReservedPropertyNames>
        </ECCustomAttributes>
        <ECNavigationProperty propertyName="Model" relationshipName="ModelContainsElements" direction="backward" readOnly="true" description="The bis:Model that contains this bis:Element.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16">
                    <StatementTypes>2</StatementTypes>
                </CustomHandledProperty>
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00">
                    <!-- Creates the ModelId foreign key column in the bis_Element table -->
                    <OnDeleteAction>NoAction</OnDeleteAction>
                </ForeignKeyConstraint>
            </ECCustomAttributes>
        </ECNavigationProperty>
        <ECProperty propertyName="LastMod" typeName="dateTime" readOnly="true" displayLabel="Last Modified" description="The last modified time of the bis:Element. This is maintained by the core framework and should not be set directly by applications.">
            <ECCustomAttributes>
                <DateTimeInfo xmlns="CoreCustomAttributes.01.00.00">
                    <DateTimeKind>Utc</DateTimeKind>
                </DateTimeInfo>
                <CustomHandledProperty xmlns="BisCore.01.00.16">
                    <StatementTypes>0</StatementTypes>
                </CustomHandledProperty>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.00"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECNavigationProperty propertyName="CodeSpec" displayLabel="Code Specification" relationshipName="CodeSpecSpecifiesCode" direction="backward" description="The CodeSpec property identifies the bis:CodeSpec used to generate and validate the code value for this bis:Element. The combination of CodeSpec, CodeScope, and CodeValue properties must be unique for each bis:Element instance.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.00"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16">
                    <StatementTypes>6</StatementTypes>
                </CustomHandledProperty>
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00">
                    <!-- Creates the CodeSpecId foreign key column in the bis_Element table -->
                    <OnDeleteAction>NoAction</OnDeleteAction>
                </ForeignKeyConstraint>
            </ECCustomAttributes>
        </ECNavigationProperty>
        <ECNavigationProperty propertyName="CodeScope" displayLabel="Code Scope" relationshipName="ElementScopesCode" direction="backward"  description="The CodeScope property identifies the bis:Element that provides the uniqueness scope for the code value. The combination of CodeSpec, CodeScope, and CodeValue properties must be unique for each bis:Element instance.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.00"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16">
                    <StatementTypes>6</StatementTypes>
                </CustomHandledProperty>
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00">
                    <!-- Creates the CodeScopeId foreign key column in the bis_Element table -->
                    <OnDeleteAction>NoAction</OnDeleteAction>
                </ForeignKeyConstraint>
            </ECCustomAttributes>
        </ECNavigationProperty>
        <ECProperty propertyName="CodeValue" typeName="string" displayLabel="Code" description="Nullable string property that holds the actual text of an Element's Code. The combination of CodeSpec, CodeScope, and CodeValue properties must be unique for each bis:Element instance.">
            <ECCustomAttributes>
                <PropertyMap xmlns="ECDbMap.02.00.00">
                    <IsNullable>True</IsNullable>
                    <Collation>NoCase</Collation>
                </PropertyMap>
                <CustomHandledProperty xmlns="BisCore.01.00.16">
                    <StatementTypes>6</StatementTypes>
                </CustomHandledProperty>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="UserLabel" typeName="string" displayLabel="User Label" description="An optional friendly name given by the user (as opposed to the formal name stored in the CodeValue property).">
            <ECCustomAttributes>
                <PropertyMap xmlns="ECDbMap.02.00.00">
                    <IsNullable>True</IsNullable>
                    <Collation>NoCase</Collation>
                    <IsUnique>False</IsUnique>
                </PropertyMap>
                <CustomHandledProperty xmlns="BisCore.01.00.16">
                    <StatementTypes>6</StatementTypes>
                </CustomHandledProperty>
            </ECCustomAttributes>
        </ECProperty>
        <ECNavigationProperty propertyName="Parent" relationshipName="ElementOwnsChildElements" direction="backward" description="The parent bis:Element that owns this bis:Element.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16">
                    <StatementTypes>6</StatementTypes>
                </CustomHandledProperty>
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00">
                    <!-- Creates the ParentId foreign key column in the bis_Element table -->
                    <!-- The Element API will handle cascading the delete -->
                    <OnDeleteAction>NoAction</OnDeleteAction>
                </ForeignKeyConstraint>
            </ECCustomAttributes>
        </ECNavigationProperty>
        <ECProperty propertyName="FederationGuid" typeName="binary" extendedTypeName="BeGuid" displayLabel="Federation GUID" description="The GUID used to federate this bis:Element across repositories.">
            <ECCustomAttributes>
                <PropertyMap xmlns="ECDbMap.02.00.00">
                    <IsNullable>True</IsNullable>
                    <IsUnique>True</IsUnique>
                </PropertyMap>
                <CustomHandledProperty xmlns="BisCore.01.00.16">
                    <StatementTypes>6</StatementTypes>
                </CustomHandledProperty>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="JsonProperties" typeName="string" extendedTypeName="Json" displayLabel="JSON Properties" description="A string property that users and/or applications can use to persist ad hoc JSON values.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16">
                    <StatementTypes>6</StatementTypes>
                </CustomHandledProperty>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="InformationContentElement" modifier="Abstract" displayLabel="Information Content Element" description="bis:InformationContentElement is an abstract base class for modeling pure information Entities. Only the core framework should directly subclass from bis:InformationContentElement. Domain and application developers should start with the most appropriate subclass of bis:InformationContentElement.">
        <BaseClass>Element</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <JoinedTablePerDirectSubclass xmlns="ECDbMap.02.00.00"/>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03"/>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="DriverBundleElement" modifier="Abstract" displayLabel="Driver Bundle Element" description="A bis:DriverBundleElement is used in conjunction with bis:ElementDrivesElement relationships to bundle multiple inputs before driving the output bis:Element.">
        <BaseClass>InformationContentElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="InformationRecordElement" modifier="Abstract" displayLabel="Information Record Element" description="bis:InformationRecordElement is an abstract base class for modeling information records. The bis:InformationRecordElement class is the default choice if no other subclass of bis:InformationContentElement makes sense.">
        <BaseClass>InformationContentElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="DefinitionElement" modifier="Abstract" displayLabel="Definition Element" description="A bis:DefinitionElement holds configuration-related information that is meant to be referenced/shared.">
        <BaseClass>InformationContentElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
        </ECCustomAttributes>
        <ECProperty propertyName="IsPrivate" typeName="boolean" displayLabel="Is Private" description="If true, this bis:DefinitionElement should not be displayed in the GUI.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="DefinitionSet" modifier="Abstract" displayLabel="Definition Set" description="This abstract class unifies DefinitionGroup and DefinitionContainer for relationship endpoint purposes.">
        <!-- NOTE: Only DefinitionGroup and DefinitionContainer should subclass DefinitionSet -->
        <BaseClass>DefinitionElement</BaseClass>
        <ECProperty propertyName="Rank" typeName="DefinitionElementRank" description="The Rank of a DefinitionSet indicates how it was created, who is aware of it and where it can be used.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>
    <ECEntityClass typeName="DefinitionContainer" displayLabel="Definition Container" description="A set of DefinitionElements that are exclusively owned by the DefinitionContainer and contained within its sub-model.">
        <BaseClass>DefinitionSet</BaseClass>
        <BaseClass>ISubModeledElement</BaseClass>
    </ECEntityClass>
    <ECEntityClass typeName="DefinitionGroup" displayLabel="Definition Group" description="A non-exclusive set of DefinitionElements grouped using the DefinitionGroupGroupsDefinitions relationship.">
        <BaseClass>DefinitionSet</BaseClass>
    </ECEntityClass>
    <ECRelationshipClass typeName="DefinitionGroupGroupsDefinitions" strength="referencing" modifier="None" description="A relationship used to identify the DefinitionsElements that are members of a DefinitionGroup.">
        <BaseClass>ElementGroupsMembers</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="groups" polymorphic="true">
            <Class class="DefinitionGroup"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is grouped by" polymorphic="true">
            <Class class="DefinitionElement"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="TypeDefinitionElement" modifier="Abstract" displayLabel="Type Definition" description="Defines a shared set of properties (the 'type') that can be associated with a bis:Element.">
        <BaseClass>DefinitionElement</BaseClass>
        <ECNavigationProperty propertyName="Recipe" relationshipName="TypeDefinitionHasRecipe" direction="forward">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECNavigationProperty>
    </ECEntityClass>
    <ECEntityClass typeName="GraphicalType2d" modifier="Abstract" displayLabel="2D Graphical Type" description="Defines a shared set of properties (the 'type') that can be associated with a bis:GraphicalElement2d instance.">
        <BaseClass>TypeDefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="PhysicalType" modifier="Abstract" displayLabel="Physical Type" description="Defines a shared set of properties whose values vary per-type of a bis:PhysicalElement rather than per-instance. Intended for modeling Entities such as catalog entries, that typically define property values that are common among all instances associated with a given catalog entry.">
        <BaseClass>TypeDefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECNavigationProperty propertyName="PhysicalMaterial" displayLabel="Physical Material" relationshipName="PhysicalTypeIsOfPhysicalMaterial" direction="forward" description="Indicates the bis:PhysicalMaterial of which bis:PhysicalElements of the given bis:PhysicalType are made."/>
    </ECEntityClass>
    <ECRelationshipClass typeName="PhysicalTypeIsOfPhysicalMaterial" strength="referencing" modifier="Sealed" description="A relationship indicating the bis:PhysicalMaterial of which bis:PhysicalElements of the given bis:PhysicalType are made. Can be overridden with bis:PhysicalElementIsOfPhysicalMaterial.">
        <!-- @see PhysicalType.PhysicalMaterial ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="is of" polymorphic="true">
            <Class class="PhysicalType" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is material of" polymorphic="true">
            <Class class="PhysicalMaterial"/>
        </Target>
    </ECRelationshipClass>
    <ECEntityClass typeName="SpatialLocationType" modifier="Abstract" displayLabel="Spatial Location Type" description="Defines a shared set of properties whose values vary per-type of a bis:SpatialLocationElement rather than per-instance.">
        <BaseClass>TypeDefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECRelationshipClass typeName="SpatialLocationTypeRepresentsTypeDefinition" strength="referencing" modifier="None" description="Relates a bis:SpatialLocationType to the bis:TypeDefinitionElement that it represents.">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="represents" polymorphic="true">
            <Class class="SpatialLocationType"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is represented by" polymorphic="true">
            <Class class="TypeDefinitionElement"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="TypeDefinitionHasRecipe" strength="referencing" modifier="Abstract">
        <!-- @see TypeDefinitionElement.Recipe ECNavigationProperty -->
        <!-- Note: not configured as a foreign key because the RecipeDefinitionElement may be excluded in a filtered briefcase -->
        <Source multiplicity="(0..*)" roleLabel="has" polymorphic="true">
            <Class class="TypeDefinitionElement" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is referenced by" polymorphic="true">
            <Class class="RecipeDefinitionElement"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="PhysicalTypeHasTemplateRecipe" strength="referencing" modifier="None">
        <BaseClass>TypeDefinitionHasRecipe</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="has" polymorphic="true">
            <Class class="PhysicalType" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is referenced by" polymorphic="true">
            <Class class="TemplateRecipe3d"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="GraphicalType2dHasTemplateRecipe" strength="referencing" modifier="None">
        <BaseClass>TypeDefinitionHasRecipe</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="has" polymorphic="true">
            <Class class="GraphicalType2d" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is referenced by" polymorphic="true">
            <Class class="TemplateRecipe2d"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="SpatialLocationTypeHasTemplateRecipe" strength="referencing" modifier="None">
        <BaseClass>TypeDefinitionHasRecipe</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="has" polymorphic="true">
            <Class class="SpatialLocationType" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is referenced by" polymorphic="true">
            <Class class="TemplateRecipe3dInPlan"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="GeometricElement2dHasTypeDefinition" strength="referencing" modifier="Abstract">
        <!-- @see GeometricElement2d.TypeDefinition ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="is of type" polymorphic="true">
            <Class class="GeometricElement2d" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="true">
            <Class class="TypeDefinitionElement"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="GraphicalElement2dIsOfType" strength="referencing" modifier="None">
        <BaseClass>GeometricElement2dHasTypeDefinition</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="is of type" polymorphic="true">
            <Class class="GraphicalElement2d" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="true">
            <Class class="GraphicalType2d"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="GeometricElement3dHasTypeDefinition" strength="referencing" modifier="Abstract">
        <!-- @see GeometricElement3d.TypeDefinition ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="is of type" polymorphic="true">
            <Class class="GeometricElement3d" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="true">
            <Class class="TypeDefinitionElement"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="PhysicalElementIsOfType" strength="referencing" modifier="None" description="A type-instance relation; one that indicates that the specific bis:PhysicalElement is an instance of the defined bis:PhysicalType. E.g. a pump with serial number #AR-23 is of type X-Model-Y.">
        <!-- Note: Should be considered abstract, but is concrete for legacy/compatibility reasons. -->
        <BaseClass>GeometricElement3dHasTypeDefinition</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="is of type" polymorphic="true">
            <Class class="PhysicalElement" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="true">
            <Class class="PhysicalType"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="SpatialLocationIsOfType" strength="referencing" modifier="None" description="A type-instance relation; one that indicates that the specific bis:SpatialLocationElement is an instance of the defined bis:SpatialLocationType. E.g. AssemblyArea#5 if of type FloorSpace.">
        <!-- Note: Should be considered abstract, but is concrete for legacy/compatibility reasons. -->
        <BaseClass>GeometricElement3dHasTypeDefinition</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="is of type" polymorphic="true">
            <Class class="SpatialLocationElement" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is type of" polymorphic="true">
            <Class class="SpatialLocationType"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="RecipeDefinitionElement" modifier="Abstract" displayLabel="Recipe Definition" description="Defines instructions for creating/updating Element instances, e.g. determining their geometry from a template or a parametric script.">
        <BaseClass>DefinitionElement</BaseClass>
    </ECEntityClass>
    <ECEntityClass typeName="TemplateRecipe2d" displayLabel="2D Template Recipe" description="A recipe that uses a 2D template for creating new instances.">
        <BaseClass>RecipeDefinitionElement</BaseClass>
        <BaseClass>ISubModeledElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="TemplateRecipe3d" displayLabel="3D Template Recipe" description="A recipe that uses a 3D template for creating new instances.">
        <BaseClass>RecipeDefinitionElement</BaseClass>
        <BaseClass>ISubModeledElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="TemplateRecipe3dInPlan" displayLabel="Plan-Projection Template Recipe" description="A recipe that uses a Plan-Projection template for creating new instances.">
        <BaseClass>RecipeDefinitionElement</BaseClass>
        <BaseClass>ISubModeledElement</BaseClass>
    </ECEntityClass>

    <ECEnumeration typeName="ThumbnailImageFormat" backingTypeName="string" isStrict="true" description="Supported MIME-type formats for Thumbnail images.">
        <ECEnumerator value="image/jpeg" name="Jpeg" displayLabel="Jpeg"/>
        <ECEnumerator value="image/png" name="Png" displayLabel="Png"/>
    </ECEnumeration>

    <ECEntityClass typeName="DefinitionThumbnail" modifier="None" displayLabel="Thumbnail" description="A bis:DefinitionElement that captures the Thumbnail of one or more bis:DefinitionElement instances.">
        <BaseClass>DefinitionElement</BaseClass>
        <ECProperty propertyName="Image" typeName="binary" displayLabel="Image" description="Image of the Thumbnail.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="ImageFormat" typeName="ThumbnailImageFormat" displayLabel="Image Format" description="Format of the Image captured as MIME-type.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>
    <ECRelationshipClass typeName="DefinitionElementHasThumbnails" strength="referencing" modifier="None" description="A relationship associating one or more instances of bis:DefinitionThumbnail with a particular bis:DefinitionElement.">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="has" polymorphic="true">
            <Class class="DefinitionElement"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is associated to" polymorphic="true">
            <Class class="DefinitionThumbnail"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="Subject" modifier="Sealed" description="A bis:Subject is an information element that references (by name) some real-world Object that will be modeled in this BIS repository.">
        <BaseClass>InformationReferenceElement</BaseClass>
        <BaseClass>IParentElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" description="A human-readable description of the real-world Object(s) that will be modeled for this Subject"/>
    </ECEntityClass>
    <ECEntityClass typeName="ProjectInformationRecord" modifier="Sealed" description="A bis:InformationRecordElement that captures Project-level properties associated to the real-world Entity referenced by its parent Subject.">
        <BaseClass>InformationRecordElement</BaseClass>
        <ECProperty propertyName="ProjectName" typeName="string" displayLabel="Project Name" description="Name of the Project associated with the Parent Subject"/>
        <ECProperty propertyName="ProjectNumber" typeName="string" displayLabel="Project Number" description="Number of the Project associated with the Parent Subject"/>
        <ECProperty propertyName="Location" typeName="string" displayLabel="Location" description="A human-readable description of the Location associated with the Parent Subject"/>
    </ECEntityClass>
    <ECRelationshipClass typeName="SubjectOwnsPartitionElements" strength="embedding" modifier="None">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="owns" polymorphic="false">
            <Class class="Subject"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by" polymorphic="true">
            <Class class="InformationPartitionElement"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="SubjectOwnsSubjects" strength="embedding" modifier="None">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="owns child" polymorphic="false">
            <Class class="Subject"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by parent" polymorphic="false">
            <Class class="Subject"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="SubjectOwnsProjectInformationRecord" strength="embedding" modifier="None">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source multiplicity="(1..1)" roleLabel="owns" polymorphic="false">
            <Class class="Subject"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is owned by" polymorphic="false">
            <Class class="ProjectInformationRecord"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="SubjectRefersToSubject" strength="referencing" modifier="None" description="A relationship allowing a bis:Subject to express association with another bis:Subject that is not one of its children.">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="refers to" polymorphic="false">
            <Class class="Subject"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is referenced by" polymorphic="false">
            <Class class="Subject"/>
        </Target>
    </ECRelationshipClass>
    <ECEntityClass typeName="InformationPartitionElement" modifier="Abstract" displayLabel="Information Partition" description="An instance of a specialization of bis:InformationPartitionElement establishes a particular Modeling Perspective for its parent bis:Subject. Instances are always sub-modeled by a specialization of bis:Model of the appropriate Modeling Perspective.">
        <BaseClass>InformationContentElement</BaseClass>
        <BaseClass>ISubModeledElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" description="A human-readable string describing the intent behind the partition."/>
    </ECEntityClass>
    <ECEntityClass typeName="DefinitionPartition" modifier="Sealed" displayLabel="Definition Partition" description="A bis:DefinitionPartition element establishes a 'Definition' Modeling Perspective for its parent bis:Subject. A bis:DefinitionPartition is always sub-modeled by a bis:DefinitionModel.">
        <BaseClass>InformationPartitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00" />
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="DocumentPartition" modifier="Sealed" displayLabel="Document Partition" description="A bis:DocumentPartition element establishes a 'Document' Modeling Perspective for its parent bis:Subject. A bis:DocumentPartition is always sub-modeled by a bis:DocumentListModel.">
        <BaseClass>InformationPartitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00" />
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="GroupInformationPartition" modifier="Sealed" displayLabel="Group Information Partition" description="A bis:GroupInformationPartition element establishes a 'Group Information' Modeling Perspective for its parent bis:Subject. A bis:GroupInformationPartition is always sub-modeled by a bis:GroupInformationModel.">
        <BaseClass>InformationPartitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00" />
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="InformationRecordPartition" modifier="Sealed" displayLabel="Information Record Partition" description="A bis:InformationRecordPartition element establishes a 'Information Record' Modeling Perspective for its parent bis:Subject. A bis:InformationRecordPartition is always sub-modeled by a bis:InformationRecordModel.">
        <BaseClass>InformationPartitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00" />
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="LinkPartition" modifier="Sealed" displayLabel="Link Partition" description="A bis:LinkPartition element establishes a 'Link' Modeling Perspective for its parent bis:Subject. A bis:LinkPartition is always sub-modeled by a bis:LinkModel.">
        <BaseClass>InformationPartitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00" />
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="PhysicalPartition" modifier="Sealed" displayLabel="Physical Partition" description="A bis:PhysicalPartition element establishes a 'Physical' Modeling Perspective for its parent bis:Subject. A bis:PhysicalPartition is always sub-modeled by a bis:PhysicalModel.">
        <BaseClass>InformationPartitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00" />
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="SpatialLocationPartition" modifier="Sealed" displayLabel="Spatial Location Partition" description="A bis:SpatialLocationPartition element establishes a 'SpatialLocation' Modeling Perspective for its parent bis:Subject. A bis:SpatialLocationPartition is always sub-modeled by a bis:SpatialLocationModel.">
        <BaseClass>InformationPartitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00" />
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="GraphicalPartition3d" modifier="Sealed" displayLabel="3D Graphical Partition" description="A bis:GraphicalPartition3d element establishes a '3D Graphical' Modeling Perspective for its parent bis:Subject. A bis:GraphicalPartition3d is always sub-modeled by a bis:GraphicalModel3d.">
        <BaseClass>InformationPartitionElement</BaseClass>
    </ECEntityClass>

    <ECEntityClass typeName="InformationReferenceElement" modifier="Abstract" displayLabel="Information Reference" description="bis:InformationReferenceElement is an abstract base class used for modeling Entities whose main purpose is to reference something else.">
        <BaseClass>InformationContentElement</BaseClass>
        <ECCustomAttributes>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="GroupInformationElement" modifier="Abstract" displayLabel="Group Information" description="bis:GroupInformationElement is an abstract base class used for modeling Entities whose main purpose is to group related elements.">
        <BaseClass>InformationReferenceElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="LinkElement" modifier="Abstract" displayLabel="Link" description="A bis:LinkElement is a bis:InformationReferenceElement that specifies a link to some resource that is not modeled with BIS.">
        <BaseClass>InformationReferenceElement</BaseClass>
    </ECEntityClass>

    <ECEntityClass typeName="UrlLink" displayLabel="URL Link" description="A bis:UrlLink is a bis:LinkElement that specifies a URL link.">
        <BaseClass>LinkElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00" />
            <DbIndexList xmlns="ECDbMap.02.00.00">
                <Indexes>
                    <DbIndex>
                        <Name>ix_bis_UrlLink_Url</Name>
                        <IsUnique>False</IsUnique>
                        <Properties>
                            <string>Url</string>
                        </Properties>
                    </DbIndex>
                </Indexes>
            </DbIndexList>
        </ECCustomAttributes>
        <ECProperty propertyName="Url" displayLabel="URL" typeName="string" extendedTypeName="URI" description="A URL pointing to an external resource.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Description" typeName="string" description="A human-readable description of the URL">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="RepositoryLink" modifier="None" displayLabel="Repository Link" description="A bis:RepositoryLink is a bis:UrlLink element that links to an external repository. It implements ISubModeledElement only so that a sub-Model could be used to cache information from the external repository.">
        <BaseClass>UrlLink</BaseClass>
        <BaseClass>ISubModeledElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="RepositoryGuid" typeName="binary" extendedTypeName="BeGuid" displayLabel="Repository GUID" description="A GUID that identifies the external repository.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </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 is used to capture metadata about its owning bis:RepositoryLink.">
        <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>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00" />
            <DbIndexList xmlns="ECDbMap.02.00.00">
                <Indexes>
                    <DbIndex>
                        <Name>ix_bis_EmbeddedFileLink_Name</Name>
                        <IsUnique>False</IsUnique>
                        <Properties>
                            <string>Name</string>
                        </Properties>
                    </DbIndex>
                </Indexes>
            </DbIndexList>
        </ECCustomAttributes>
        <ECProperty propertyName="Name" typeName="string" description="A name for looking up the embedded file. Must be unique within the iModel.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Description" typeName="string" description="A human-readable description of the Embedded File">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="Document" modifier="Abstract" displayLabel="Document" description="A bis:Document is a social artifact designed with the distinct purpose to convey information in a manner that maximizes reach and lifespan and minimize dependency on other artifacts. Although there is often a one-to-one relationship between a bis:Document and an electronic file, this does not imply that a document is a file; instead, a document can be realized in many different media (such as paper) or have more than one file supporting it.">
        <BaseClass>InformationContentElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="Drawing" description="A bis:Drawing is a bis:Document of a 2D drawing.">
        <BaseClass>Document</BaseClass>
        <BaseClass>ISubModeledElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="ScaleFactor" typeName="double" displayLabel="Scale Factor" description="Scale factor to be applied to any GeometricElement2d containing Text in its GeometryStream, during its creation in the associated DrawingModel, and later used when attaching this Drawing to a Sheet." />
    </ECEntityClass>

    <ECEntityClass typeName="SectionDrawing" displayLabel="Section Drawing" description="A bis:SectionDrawing is a bis:Drawing of a 2D section of a spatial view. A bis:SectionDrawing can be sub-modeled by a DrawingModel or a GraphicalModel3d.">
        <BaseClass>Drawing</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="SectionType" typeName="SectionType" displayLabel="Section Type" description="Type of the section: e.g. Section, Plan, Elevation, Detail."/>
        <ECNavigationProperty propertyName="SpatialView" relationshipName="SectionDrawingGeneratedFromSpatialView" direction="forward" displayLabel="Spatial View" description="The SpatialViewDefinition used to generate this SectionDrawing."/>
    </ECEntityClass>

    <ECRelationshipClass typeName="SectionDrawingGeneratedFromSpatialView" strengthDirection="backward" strength="referencing" modifier="Sealed" description="Identifies the SpatialViewDefinition used to generate the SectionDrawing.">
        <!-- @see SectionDrawing.SpatialView ECNavigationProperty -->
        <Source multiplicity="(0..*)" polymorphic="true" roleLabel="was generated from">
            <Class class="SectionDrawing"/>
        </Source>
        <Target multiplicity="(1..1)" polymorphic="true" roleLabel="was used to generate">
            <Class class="SpatialViewDefinition"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="SheetBorderTemplate" displayLabel="Sheet Border Template">
        <BaseClass>Document</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Height" typeName="double" description="Height of the sheet border."/>
        <ECProperty propertyName="Width" typeName="double" description="Width of the sheet border."/>
    </ECEntityClass>

    <ECEntityClass typeName="SheetBorder" displayLabel="Sheet Border">
        <BaseClass>DrawingGraphic</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <!-- Template is required -->
        <!-- Should have IsNullable=False ...? -->
        <ECNavigationProperty propertyName="BorderTemplate" relationshipName="SheetBorderHasSheetBorderTemplate" direction="forward" displayLabel="Border Template"/>
    </ECEntityClass>

    <ECEntityClass typeName="SheetTemplate" displayLabel="Sheet Template">
        <BaseClass>Document</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <!-- Height and Width will be locked to the border, if there is one -->
        <ECProperty propertyName="Height" typeName="double" description="Height of the sheet."/>
        <ECProperty propertyName="Width" typeName="double" description="Width of the sheet."/>
        <!-- Border is optional -->
        <ECNavigationProperty propertyName="Border" relationshipName="SheetTemplateHasSheetBorder" direction="forward" />
    </ECEntityClass>

    <ECEntityClass typeName="Sheet" description="A bis:Sheet is a bis:Document of a 2D sheet.">
        <BaseClass>Document</BaseClass>
        <BaseClass>ISubModeledElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <ReservedPropertyNames xmlns="BisCore.01.00.00">
                <PropertyNames>
                    <string>Attachments</string>
                </PropertyNames>
            </ReservedPropertyNames>
        </ECCustomAttributes>
        <ECProperty propertyName="Scale" typeName="double" description="The Sheet's drawing scale"/>
        <!-- Height and Width will be locked to the template, if there is one -->
        <ECProperty propertyName="Height" typeName="double" description="Height of the Sheet (in meters)"/>
        <ECProperty propertyName="Width" typeName="double" description="Width of the Sheet (in meters)"/>
        <!-- Template is optional -->
        <ECNavigationProperty propertyName="SheetTemplate" relationshipName="SheetHasSheetTemplate" direction="forward" displayLabel="Sheet Template" />
    </ECEntityClass>

    <ECRelationshipClass typeName="SheetHasSheetTemplate" strength="referencing" modifier="Sealed">
        <!-- @see Sheet.SheetTemplate ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="has" polymorphic="true">
            <Class class="Sheet" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="defines" polymorphic="true">
            <Class class="SheetTemplate"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="SheetTemplateHasSheetBorder" strength="referencing" modifier="Sealed">
        <!-- @see SheetTemplate.Border ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="has" polymorphic="true">
            <Class class="SheetTemplate" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is referenced by" polymorphic="true">
            <Class class="SheetBorder"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="SheetBorderHasSheetBorderTemplate" strength="referencing" modifier="Sealed">
        <!-- @see SheetBorder.BorderTemplate ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="has" polymorphic="true">
            <Class class="SheetBorder" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="defines" polymorphic="true">
            <Class class="SheetBorderTemplate"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="SheetIndexPartition" modifier="Sealed" displayLabel="Sheet Index Partition" description="A bis:SheetIndexPartition element establishes a 'Sheet Index' Modeling Perspective for its parent bis:Subject. A bis:SheetIndexPartition is always sub-modeled by a bis:SheetIndexModel.">
        <BaseClass>InformationPartitionElement</BaseClass>
    </ECEntityClass>

    <ECEntityClass typeName="SheetIndexModel" displayLabel="Sheet Index Model" description="A container for persisting bis:SheetIndexEntry and bis:SheetIndex elements.">
        <BaseClass>InformationModel</BaseClass>
    </ECEntityClass>

    <ECEntityClass typeName="SheetIndexEntry" modifier="Abstract" description="A bis:InformationReferenceElement used as the base-class for elements that participate in a Sheet-Index hierarchy.">
        <!-- @note The Element.Parent property + the ElementOwnsChildElements relationship is used to navigate to the owning Sheet Index or Folder -->
        <BaseClass>InformationReferenceElement</BaseClass>
        <ECProperty propertyName="EntryPriority" typeName="int" displayLabel="Priority" description="Can be used to prioritize or order members within a SheetIndex or SheetIndexFolder."/>
    </ECEntityClass>

    <ECEntityClass typeName="SheetIndexFolder" modifier="None" description="A SheetIndexEntry used to organize other SheetIndexEntry instances in a hierarchy.">
        <BaseClass>SheetIndexEntry</BaseClass>
        <BaseClass>IParentElement</BaseClass>
    </ECEntityClass>

    <ECRelationshipClass typeName="SheetIndexFolderOwnsEntries" strength="embedding" modifier="None">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="owns" polymorphic="true">
            <Class class="SheetIndexFolder"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by" polymorphic="true">
            <Class class="SheetIndexEntry"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="SheetReference" modifier="None" description="A SheetIndexEntry used to include a Sheet instance into a Sheet-Index hierarchy.">
        <BaseClass>SheetIndexEntry</BaseClass>
        <ECNavigationProperty propertyName="Sheet" relationshipName="SheetReferenceRefersToSheet" direction="forward" readOnly="true" displayLabel="Sheet" description="The bis:Sheet that this bis:SheetReference is ponting to."/>
    </ECEntityClass>

    <ECEntityClass typeName="SheetInformationAspect" displayLabel="Sheet Information Aspect" modifier="None" description="A bis:ElementUniqueAspect that captures common information about a single Sheet that is typically included in its graphical layout.">
        <BaseClass>ElementUniqueAspect</BaseClass>
        <ECProperty propertyName="DesignedBy" typeName="string" displayLabel="Designed By"/>
        <ECProperty propertyName="DesignedDate" typeName="dateTime" displayLabel="Designed Date">
            <ECCustomAttributes>
                <DateTimeInfo xmlns="CoreCustomAttributes.01.00.03">
                    <DateTimeKind>Utc</DateTimeKind>
                </DateTimeInfo>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="DrawnBy" typeName="string" displayLabel="Drawn By"/>
        <ECProperty propertyName="CheckedBy" typeName="string" displayLabel="Checked By"/>
    </ECEntityClass>

    <ECRelationshipClass typeName="SheetOwnsSheetInformationAspect" strength="embedding" modifier="None">
        <BaseClass>ElementOwnsUniqueAspect</BaseClass>
        <Source multiplicity="(1..1)" roleLabel="owns" polymorphic="false">
            <Class class="Sheet"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is owned by" polymorphic="true">
            <Class class="SheetInformationAspect"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="SheetReferenceRefersToSheet" strength="referencing" modifier="Sealed">
        <!-- @see SheetReference.Sheet ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="refers to" polymorphic="true">
            <Class class="SheetReference" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is referenced by" polymorphic="true">
            <Class class="Sheet"/>
        </Target>
    </ECRelationshipClass>
    
    <ECEntityClass typeName="SheetIndex" modifier="None" description="A bis:InformationReferenceElement used to organize bis:Sheet instances into a hierarchy with the assistance of bis:SheetIndexFolder and other bis:SheetIndex instances.">
        <BaseClass>InformationReferenceElement</BaseClass>
        <BaseClass>IParentElement</BaseClass>
    </ECEntityClass>

    <ECRelationshipClass typeName="SheetIndexOwnsEntries" strength="embedding" modifier="None">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="owns" polymorphic="true">
            <Class class="SheetIndex"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by" polymorphic="true">
            <Class class="SheetIndexEntry"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="SheetIndexReference" modifier="None" description="A SheetIndexEntry used to include a SheetIndex hierarchy into another one.">
        <BaseClass>SheetIndexEntry</BaseClass>
        <ECNavigationProperty propertyName="SheetIndex" relationshipName="SheetIndexReferenceRefersToSheetIndex" direction="forward" readOnly="true" displayLabel="SheetIndex" description="The bis:SheetIndex that this bis:SheetIndexReference is ponting to."/>
    </ECEntityClass>

    <ECRelationshipClass typeName="SheetIndexReferenceRefersToSheetIndex" strength="referencing" modifier="Sealed">
        <!-- @see SheetIndexReference.SheetIndex ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="refers to" polymorphic="true">
            <Class class="SheetIndexReference" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is referenced by" polymorphic="true">
            <Class class="SheetIndex"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="InformationCarrierElement" modifier="Abstract" displayLabel="Information Carrier" description="DEPRECATED: An Information Carrier carries information, but is not the information itself. For example, the arrangement of ink on paper or the sequence of electronic bits are information carriers.">
        <BaseClass>Element</BaseClass>
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>BisCore will focus on the information itself and not how it is carried. Thus, the InformationCarrierElement class was deprecated.</Description>
            </Deprecated>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <JoinedTablePerDirectSubclass xmlns="ECDbMap.02.00.00"/>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03"/>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="DocumentCarrier" modifier="Abstract" displayLabel="Document Carrier" description="DEPRECATED: A Document Carrier is an Information Carrier that carries a Document. An electronic file is a good example.">
        <BaseClass>InformationCarrierElement</BaseClass>
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>BisCore will focus on the information itself and not how it is carried. Thus, the DocumentCarrier class was deprecated.</Description>
            </Deprecated>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="GeometricElement" modifier="Abstract" displayLabel="Geometric Element" description="A bis:Element and abstract base class used to model Entities that intrinsically have geometry.">
        <BaseClass>Element</BaseClass>
        <ECCustomAttributes>
            <JoinedTablePerDirectSubclass xmlns="ECDbMap.02.00.00"/>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03"/>
            <ReservedPropertyNames xmlns="BisCore.01.00.00">
                <PropertyNames>
                    <string>Geom</string>
                </PropertyNames>
            </ReservedPropertyNames>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="GeometricElement3d" modifier="Abstract" displayLabel="3D Geometric Element" description="bis:GeometricElement3d is an abstract base class used to model real world Entities that intrinsically have 3D geometry.">
        <!-- Base class for elements with 3d geometry -->
        <!-- GeometricElement3d elements are not inherently spatially located, but can be spatially located. -->
        <BaseClass>GeometricElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
            <ReservedPropertyNames xmlns="BisCore.01.00.00">
                <PropertyNames>
                    <string>Placement</string>
                </PropertyNames>
            </ReservedPropertyNames>
        </ECCustomAttributes>
        <ECNavigationProperty propertyName="Category" relationshipName="GeometricElement3dIsInCategory" direction="forward" description="The bis:SpatialCategory used to categorize this bis:GeometricElement3d">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00">
                    <!-- Creates the CategoryId foreign key column in the bis_GeometricElement3d table -->
                    <OnDeleteAction>NoAction</OnDeleteAction>
                </ForeignKeyConstraint>
            </ECCustomAttributes>
        </ECNavigationProperty>
        <ECProperty propertyName="InSpatialIndex" typeName="boolean" displayLabel="In Spatial Index" description="If true, this element will have an entry in the Spatial Index.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Origin" typeName="point3d" description="The placement origin of this bis:Element.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Yaw" typeName="double" description="The Yaw angle (in degrees) of the orientation of this bis:Element.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Pitch" typeName="double" description="The Pitch angle (in degrees) of the orientation of this bis:Element.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Roll" typeName="double" description="The Roll angle (in degrees) of the orientation of this bis:Element.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="BBoxLow" typeName="point3d" displayLabel="Bounding Box Low" description="The 'low' point of the element-aligned bounding box of this bis:Element.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="BBoxHigh" typeName="point3d" displayLabel="Bounding Box High" description="The 'high' point of the element-aligned bounding box of this bis:Element.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="GeometryStream" typeName="binary" extendedTypeName="GeometryStream" displayLabel="Geometry Stream" description="Binary stream used to persist the geometry of this bis:Element.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECNavigationProperty propertyName="TypeDefinition" relationshipName="GeometricElement3dHasTypeDefinition" direction="forward" displayLabel="Type Definition" description="Points to an instance of some specialization of TypeDefinition, which holds property values that vary per-type rather than per-instance of this Element.">
            <!-- NOTE: Has same propertyName as other element subclasses in case the concept of "TypeDefinition" needs to move down to bis:Element. -->
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <!-- Creates the TypeDefinitionId foreign key column in the bis_GeometricElement3d table -->
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00"/>
            </ECCustomAttributes>
        </ECNavigationProperty>
    </ECEntityClass>
    <ECEntityClass typeName="GraphicalElement3d" modifier="Abstract" displayLabel="3D Graphical Element" description="A bis:GraphicalElement3d element conveys information within 3D graphical presentations.">
        <BaseClass>GeometricElement3d</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="SpatialElement" modifier="Abstract" displayLabel="Spatial Element" description="A bis:SpatialElement is a bis:GeometricElement3d that occupies real world space.">
        <BaseClass>GeometricElement3d</BaseClass>
    </ECEntityClass>
    <ECEntityClass typeName="PhysicalElement" modifier="Abstract" displayLabel="Physical Element" description="A bis:PhysicalElement is spatially located, has mass, and can be 'touched'.">
        <BaseClass>SpatialElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECNavigationProperty propertyName="PhysicalMaterial" relationshipName="PhysicalElementIsOfPhysicalMaterial" direction="forward" displayLabel="Physical Material" description="Indicates the bis:PhysicalMaterial of which the bis:PhysicalElement is made."/>
    </ECEntityClass>
    <ECRelationshipClass typeName="PhysicalElementIsOfPhysicalMaterial" strength="referencing" modifier="Sealed" description="A relationship indicating the bis:PhysicalMaterial of which the bis:PhysicalElement is made.">
        <!-- @see PhysicalElement.PhysicalMaterial ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="is of material" polymorphic="true">
            <Class class="PhysicalElement" />
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is material of" polymorphic="true">
            <Class class="PhysicalMaterial"/>
        </Target>
    </ECRelationshipClass>
    <ECEntityClass typeName="PhysicalPortion" modifier="Abstract" displayLabel="Physical Portion" description="DEPRECATED: A Physical Portion represents an arbitrary portion of a larger Physical Element that will be sub-modeled by a Physical Model.">
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>The best practice is now to inherit from a PhysicalElement subclass and mix-in ISubModeledElement directly.</Description>
            </Deprecated>
        </ECCustomAttributes>
        <BaseClass>PhysicalElement</BaseClass>
        <BaseClass>ISubModeledElement</BaseClass>
    </ECEntityClass>
    <ECEntityClass typeName="SpatialLocationElement" modifier="Abstract" displayLabel="Spatial Location Element" description="A bis:SpatialLocationElement identifies a 'tracked' real world location but has no mass and cannot be 'touched'.">
        <BaseClass>SpatialElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="SpatialLocationPortion" modifier="Abstract" displayLabel="Spatial Location Portion" description="DEPRECATED: A Spatial Location Portion represents an arbitrary portion of a larger Spatial Location Element that will be sub-modeled by a Spatial Location Model.">
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>The best practice is now to inherit from a SpatialLocationElement subclass and mix-in ISubModeledElement directly.</Description>
            </Deprecated>
        </ECCustomAttributes>
        <BaseClass>SpatialLocationElement</BaseClass>
        <BaseClass>ISubModeledElement</BaseClass>
    </ECEntityClass>
    <ECEntityClass typeName="VolumeElement" displayLabel="Volume Element" description="A bis:VolumeElement is a bis:SpatialLocationElement that is restricted to defining a volume.">
        <BaseClass>SpatialLocationElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="GeometricElement2d" modifier="Abstract" displayLabel="2D Geometric Element" description="bis:GeometricElement2d is an abstract base class used to model information Entities that intrinsically have 2D geometry.">
        <!-- NOTE: only platform should directly subclass GeometricElement2d -->
        <BaseClass>GeometricElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
            <ReservedPropertyNames xmlns="BisCore.01.00.00">
                <PropertyNames>
                    <string>Placement</string>
                </PropertyNames>
            </ReservedPropertyNames>
        </ECCustomAttributes>
        <ECNavigationProperty propertyName="Category" relationshipName="GeometricElement2dIsInCategory" direction="forward" description="The bis:DrawingCategory used to categorize this bis:GeometricElement2d instance.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00">
                    <!-- Creates the CategoryId foreign key column in the bis_GeometricElement2d table -->
                    <OnDeleteAction>NoAction</OnDeleteAction>
                </ForeignKeyConstraint>
            </ECCustomAttributes>
        </ECNavigationProperty>
        <ECProperty propertyName="Origin" typeName="point2d" description="The placement origin of this bis:Element.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Rotation" typeName="double" description="The placement rotation (in degrees) of this bis:Element.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="BBoxLow" typeName="point2d" displayLabel="Bounding Box Low" description="The 'low' point of the element-aligned bounding box of this bis:Element.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="BBoxHigh" typeName="point2d" displayLabel="Bounding Box High" description="The 'high' point of the element-aligned bounding box of this bis:Element.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="GeometryStream" typeName="binary" extendedTypeName="GeometryStream" displayLabel="Geometry Stream" description="Binary stream used to persist the geometry of this bis:Element.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECNavigationProperty propertyName="TypeDefinition" relationshipName="GeometricElement2dHasTypeDefinition" direction="forward" displayLabel="Type Definition" description="Points to an instance of some specialization of TypeDefinition, which holds property values that vary per-type rather than by instance of this Element.">
            <!-- NOTE: Has same propertyName as other element subclasses in case the concept of "TypeDefinition" needs to move down to bis:Element. -->
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <!-- Creates the TypeDefinitionId foreign key column in the bis_GeometricElement2d table -->
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00"/>
            </ECCustomAttributes>
        </ECNavigationProperty>
    </ECEntityClass>
    <ECEntityClass typeName="GraphicalElement2d" modifier="Abstract" displayLabel="2D Graphical Element" description="bis:GraphicalElement2d is an abstract base class for 2D geometric elements that are used to convey information within graphical presentations (like drawings).">
        <BaseClass>GeometricElement2d</BaseClass>
    </ECEntityClass>
    <ECEntityClass typeName="AnnotationElement2d" displayLabel="2D Annotation Element" description="bis:AnnotationElement2d is a bis:GraphicalElement2d used to annotate drawings and sheets.">
        <BaseClass>GraphicalElement2d</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="DrawingGraphic" displayLabel="Drawing Graphic" description="bis:DrawingGraphic is a bis:GraphicalElement2d used to persist graphics for use in drawings.">
        <BaseClass>GraphicalElement2d</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="TextAnnotationData" modifier="Sealed" displayLabel="Text Annotation Data" description="The aspect used to store text annotation data for bis:TextAnnotation2d an bis:TextAnnotation3d elements.">
        <BaseClass>ElementUniqueAspect</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>`TextAnnotationData` is deprecated and replaced by the `TextAnnotationData` property of TextAnnotation2d and TextAnnotation3d classes.</Description>
            </Deprecated>
        </ECCustomAttributes>
        <ECProperty propertyName="TextAnnotation" typeName="binary" displayLabel="Text Annotation" description="Text in Annotations.fb.h flat buffer format">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="ITextAnnotation" modifier="Abstract" displayLabel="Text Annotation" description="An interface that can be mixed-into a bis:GeometricElement-subclass to indicate that its GeometryStream contains structured text-content that is styled according to a referenced AnnotationTextStyle, and optionally, contains portions of text-content computed from property-values in other Elements (aka Text-Fields)">
        <ECCustomAttributes>
            <IsMixin xmlns="CoreCustomAttributes.01.00.03">
                <AppliesToEntityClass>GeometricElement</AppliesToEntityClass>
            </IsMixin>
        </ECCustomAttributes>
        <ECNavigationProperty propertyName="DefaultTextStyle" relationshipName="TextAnnotationUsesTextStyleByDefault" direction="Forward" displayLabel="Default Text Style" description="The default text style used by the ITextAnnotation."/>
    </ECEntityClass>

    <ECRelationshipClass typeName="TextAnnotationUsesTextStyleByDefault" strength="referencing" modifier="Sealed" description="A relationship indicating that the source ITextAnnotation instance uses the target AnnotationTextStyle instance by default.">
        <Source multiplicity="(0..*)" roleLabel="is styled by" polymorphic="true">
            <Class class="ITextAnnotation"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="styles" polymorphic="false">
            <Class class="AnnotationTextStyle"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="ElementDrivesTextAnnotation" strength="referencing" modifier="None" description="A relationship indicating that the source Element instance drives a portion of the text-content of the target ITextAnnotation instance.">
        <BaseClass>ElementDrivesElement</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="drives" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is driven by" polymorphic="true">
            <Class class="ITextAnnotation"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="TextAnnotation2d" displayLabel="2D Text Annotation">
        <BaseClass>AnnotationElement2d</BaseClass>
        <BaseClass>ITextAnnotation</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="TextAnnotationData" typeName="string" extendedTypeName="Json" description="Data used to generate the visual representation of a TextAnnotation2d element.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>
    <ECRelationshipClass typeName="TextAnnotation2dOwnsTextAnnotationData" strength="embedding" modifier="None">
        <BaseClass>ElementOwnsUniqueAspect</BaseClass>
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>See deprecation description for TextAnnotationData class.</Description>
            </Deprecated>
        </ECCustomAttributes>
        <Source multiplicity="(1..1)" roleLabel="owns" polymorphic="true">
            <Class class="TextAnnotation2d"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is owned by" polymorphic="false">
            <Class class="TextAnnotationData"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="TextAnnotation3d" displayLabel="3D Text Annotation">
        <BaseClass>GraphicalElement3d</BaseClass>
        <BaseClass>ITextAnnotation</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="TextAnnotationData" typeName="string" extendedTypeName="Json" description="Data used to generate the visual representation of a TextAnnotation3d element.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>
    <ECRelationshipClass typeName="TextAnnotation3dOwnsTextAnnotationData" strength="embedding" modifier="None">
        <BaseClass>ElementOwnsUniqueAspect</BaseClass>
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>See deprecation description for TextAnnotationData class.</Description>
            </Deprecated>
        </ECCustomAttributes>
        <Source multiplicity="(1..1)" roleLabel="owns" polymorphic="true">
            <Class class="TextAnnotation3d"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is owned by" polymorphic="false">
            <Class class="TextAnnotationData"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="DimensionAnnotation2d" modifier="Abstract" displayLabel="DimensionAnnotation2d" description="A bis:AnnotationElement2d that displays a geometric measurement on a drawing or sheet.">
        <BaseClass>AnnotationElement2d</BaseClass>
        <ECProperty propertyName="DimensionData" typeName="string" extendedTypeName="Json" displayLabel="Dimension Data" description="A string property that that stores a complete description of the dimension in json format."/>
        <ECNavigationProperty propertyName="DimensionStyle" relationshipName="DimensionAnnotationUsesDimensionStyle" direction="Forward" displayLabel="Dimension Style" description="The dimension style used by the DimensionAnnotation2d."/>
    </ECEntityClass>  

    <ECRelationshipClass typeName="DimensionAnnotationUsesDimensionStyle" strength="referencing" modifier="Sealed" description="A relationship indicating that the source DimensionAnnotation2d instance uses the target AnnotationDimensionStyle instance.">
        <Source multiplicity="(0..*)" roleLabel="is styled by" polymorphic="true">
            <Class class="DimensionAnnotation2d"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="styles" polymorphic="false">
            <Class class="AnnotationDimensionStyle"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="LinearDimensionAnnotation2d" displayLabel="2D Linear Dimension Annotation" description="A bis:DimensionAnnotation2d that displays a linear distance measurement.">
        <BaseClass>DimensionAnnotation2d</BaseClass>
    </ECEntityClass>

    <ECEntityClass typeName="AngularDimensionAnnotation2d" displayLabel="2D Angular Dimension Annotation" description="A bis:DimensionAnnotation2d that displays an angular measurement.">
        <BaseClass>DimensionAnnotation2d</BaseClass>
    </ECEntityClass>

    <ECEntityClass typeName="RadialDimensionAnnotation2d" displayLabel="2D Radial Dimension Annotation" description="A bis:DimensionAnnotation2d that displays the measurement of the radius or diameter of an arc.">
        <BaseClass>DimensionAnnotation2d</BaseClass>
    </ECEntityClass>

    <ECEntityClass typeName="OrdinateDimensionAnnotation2d" displayLabel="2D Ordinate Dimension Annotation" description="A bis:DimensionAnnotation2d that displays a set of linear distance measurements from a common datum.">
        <BaseClass>DimensionAnnotation2d</BaseClass>
    </ECEntityClass>

    <ECEntityClass typeName="TableAnnotation2d" displayLabel="TableAnnotation2d" description="A bis:AnnotationElement2d that displays a tabular grid of information.">
        <BaseClass>AnnotationElement2d</BaseClass>
        <BaseClass>ITextAnnotation</BaseClass>        
        <ECProperty propertyName="TableData" typeName="string" extendedTypeName="Json" displayLabel="Table Data" description="A string property that stores a complete description of the table in json format."/>
    </ECEntityClass>

    <ECEntityClass typeName="ViewAttachment" displayLabel="View Attachment">
        <BaseClass>GraphicalElement2d</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECNavigationProperty propertyName="View" relationshipName="ViewIsAttached" direction="backward" description="The view that is to be attached" />
    </ECEntityClass>
    <ECRelationshipClass typeName="ViewIsAttached" strength="referencing" modifier="Sealed">
        <!-- @see ViewAttachment.View ECNavigationProperty -->
        <Source multiplicity="(1..1)" roleLabel="owns" polymorphic="true">
            <Class class="ViewDefinition"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by" polymorphic="true">
            <Class class="ViewAttachment" />
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="IParentElement" modifier="Abstract" displayLabel="Parent Element" description="An interface that can be mixed-into a bis:Element to indicate that it can be a parent (own child Elements). This interface is mutually exclusive with bis:ISubModeledElement.">
        <ECCustomAttributes>
            <IsMixin xmlns="CoreCustomAttributes.01.00.03">
                <!-- Only subclasses of bis:Element can implement the IParentElement interface -->
                <AppliesToEntityClass>Element</AppliesToEntityClass>
            </IsMixin>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECRelationshipClass typeName="ElementOwnsChildElements" strength="embedding" modifier="None" description="Relates a bis:Element to child bis:Elements which represent parts of the Entity modeled by the parent bis:Element.">
        <!-- @see Element.Parent ECNavigationProperty -->
        <!-- NOTE: Was not made abstract because of too many legacy situations. -->
        <Source multiplicity="(0..1)" roleLabel="owns child" polymorphic="true">
            <Class class="Element"/> <!-- Logically should be IParentElement, but that mixin was invented later. -->
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by parent" polymorphic="true">
            <Class class="Element"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="ElementEncapsulatesElements" strength="embedding" modifier="None" description="A relationship that indicates that child bis:Elements are meant to be hidden.">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="encapsulates" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is encapsulated by" polymorphic="true">
            <Class class="Element"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="PhysicalElementAssemblesElements" strength="embedding" modifier="None" description="A relationship that indicates a physical assembly of child bis:PhysicalElements.">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="assembles" polymorphic="true">
            <Class class="PhysicalElement"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is assembled by" polymorphic="true">
            <Class class="PhysicalElement"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="PhysicalTypeComposesSubTypes" modifier="Abstract" strength="referencing" strengthDirection="forward" description="A relationship used to identify the bis:PhysicalType instances that are sub-parts to compose a larger bis:PhysicalType.">
        <BaseClass>ElementGroupsMembers</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="composes" polymorphic="true">
            <Class class="PhysicalType"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is composed by" polymorphic="true">
            <Class class="PhysicalType"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="ElementAspect" modifier="Abstract" displayLabel="Element Aspect" description="A bis:ElementAspect is a class that defines a set of properties that are related to (and owned by) a single bis:Element. Semantically, a bis:ElementAspect can be considered part of the bis:Element. Thus, a bis:ElementAspect is deleted if its owning bis:Element is deleted.">
        <!-- BIS Guideline: Subclass ElementUniqueAspect or ElementMultiAspect rather than subclassing ElementAspect directly. -->
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03"/>
            <ReservedPropertyNames xmlns="BisCore.01.00.00">
                <PropertyNames>
                    <string>Id</string>
                    <string>ClassName</string>
                    <string>ClassFullName</string>
                </PropertyNames>
            </ReservedPropertyNames>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="ElementUniqueAspect" modifier="Abstract" displayLabel="Element Unique Aspect" description="A bis:ElementUniqueAspect is a bis:ElementAspect where there can be only zero or one instance of the bis:ElementAspect class per bis:Element.">
        <BaseClass>ElementAspect</BaseClass>
        <ECCustomAttributes>
            <ClassMap xmlns="ECDbMap.02.00.00">
                <!-- All subclasses of ElementUniqueAspect will share the same table -->
                <MapStrategy>TablePerHierarchy</MapStrategy>
            </ClassMap>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
        </ECCustomAttributes>
        <ECNavigationProperty propertyName="Element" relationshipName="ElementOwnsUniqueAspect" direction="backward" description="The bis:Element that owns this bis:ElementUniqueAspect">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <!-- Creates the ElementId foreign key column in the bis_ElementUniqueAspect table -->
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00"/>
            </ECCustomAttributes>
        </ECNavigationProperty>
    </ECEntityClass>
    <ECRelationshipClass typeName="ElementOwnsUniqueAspect" strength="embedding" modifier="None">
        <!-- @see ElementUniqueAspect.Element ECNavigationProperty -->
        <Source multiplicity="(1..1)" roleLabel="owns" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by" polymorphic="true">
            <!-- Note: multiplicity=(0..*) is correct. While an Element can only have 1 unique aspect per aspect class, it can have N unique aspects total. -->
            <Class class="ElementUniqueAspect"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="ElementMultiAspect" modifier="Abstract" displayLabel="Element Multi-Aspect" description="A bis:ElementMultiAspect is a bis:ElementAspect where there can be N instances of the bis:ElementAspect class per bis:Element.">
        <BaseClass>ElementAspect</BaseClass>
        <ECCustomAttributes>
            <ClassMap xmlns="ECDbMap.02.00.00">
                <!-- All subclasses of ElementUniqueAspect will share the same table -->
                <MapStrategy>TablePerHierarchy</MapStrategy>
            </ClassMap>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
        </ECCustomAttributes>
        <ECNavigationProperty propertyName="Element" relationshipName="ElementOwnsMultiAspects" direction="backward" description="The bis:Element that owns this bis:ElementMultiAspect.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <!-- Creates the ElementId foreign key column in the bis_ElementMultiAspect table -->
                <ForeignKeyConstraint xmlns="ECDbMap.02.00.00"/>
            </ECCustomAttributes>
        </ECNavigationProperty>
    </ECEntityClass>
    <ECRelationshipClass typeName="ElementOwnsMultiAspects" strength="embedding" modifier="None">
        <!-- @see ElementMultiAspect.Element ECNavigationProperty -->
        <Source multiplicity="(1..1)" roleLabel="owns" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by" polymorphic="true">
            <Class class="ElementMultiAspect"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="ExternalSourceAspect" displayLabel="External Source Aspect" description="A bis:ElementMultiAspect that stores synchronization information for a bis:Element originating from an external source.">
        <BaseClass>ElementMultiAspect</BaseClass>
        <ECCustomAttributes>
            <DbIndexList xmlns="ECDbMap.02.00.00">
                <Indexes>
                    <DbIndex>
                        <Name>ix_bis_ExternalSourceAspect_Source</Name>
                        <IsUnique>False</IsUnique>
                        <Properties>
                            <string>Scope.Id</string>
                            <string>Identifier</string>
                            <string>Kind</string>
                        </Properties>
                    </DbIndex>
                    <DbIndex>
                        <Name>ix_bis_ExternalSourceAspect_Identifier</Name>
                        <IsUnique>False</IsUnique>
                        <Properties>
                            <string>Identifier</string>
                        </Properties>
                    </DbIndex>
                </Indexes>
            </DbIndexList>
            <HiddenClass xmlns="CoreCustomAttributes.01.00.01" />
        </ECCustomAttributes>
        <ECNavigationProperty propertyName="Scope" relationshipName="ElementScopesExternalSourceIdentifier" direction="backward" displayLabel="Scope" description="The Id of a bis:Element that represents a scope in which the combination of properties 'Kind' and 'Identifier' will be unique. Used differently by different iModel Connectors. Recommended to point to a RepositoryLink when ids are unique per repository."/>
        <ECProperty propertyName="Identifier" typeName="string" description="The identifier of the object in the source repository"/>
        <ECProperty propertyName="Kind" typeName="string" description="The kind of object within the source repository"/>
        <ECProperty propertyName="Version" typeName="string" description="An optional value that is typically a version number or a pseudo version number like last modified time. It will be used by the synchronization process to detect that a source object is unchanged so that computing a cryptographic hash can be avoided. If present, this value must be guaranteed to change when any of the source object's content changes."/>
        <ECProperty propertyName="Checksum" typeName="string" description="The cryptographic hash (any algorithm) of the source object's content. If defined, it must be guaranteed to change when the source object's content changes."/>
        <ECProperty propertyName="JsonProperties" typeName="string" extendedTypeName="Json" description="A place where additional JSON properties can be stored. For example, provenance information or properties relating to the synchronization process."/>
        <ECNavigationProperty propertyName="Source" relationshipName="ElementIsFromSource" direction="forward" displayLabel="Source" description="The external source from which this element originated."/>
    </ECEntityClass>
    <ECRelationshipClass typeName="ElementOwnsExternalSourceAspects" strength="embedding" modifier="None">
        <BaseClass>ElementOwnsMultiAspects</BaseClass>
        <Source multiplicity="(1..1)" roleLabel="owns" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by" polymorphic="true">
            <Class class="ExternalSourceAspect"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="ElementScopesExternalSourceIdentifier" strength="referencing" strengthDirection="backward" modifier="Sealed" description="Used by ECNavigationProperty bis:ExternalSourceAspect.Scope">
        <!-- @see ExternalSourceAspect.Scope ECNavigationProperty -->
        <Source multiplicity="(1..1)" roleLabel="scopes" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is scoped by" polymorphic="true">
            <Class class="ExternalSourceAspect"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName ="ElementIsFromSource" modifier="Sealed" strength="referencing" strengthDirection="forward" description="Relates an Element (via its ExternalSourceAspect) with its ExternalSource. Used as an ECNavigationProperty by bis:ExternalSourceAspect.Source.">
        <!-- @see ExternalSourceAspect.Source ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="is from" polymorphic="true">
            <Class class="ExternalSourceAspect"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel ="is source of" polymorphic="true" >
            <Class class="ExternalSource"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="ExternalSource" modifier="None" displayLabel="Source" description="An ExternalSource refers to an 'information container' found in a repository. In some cases, the container is the entire repository." >
        <BaseClass>InformationReferenceElement</BaseClass>
        <BaseClass>IParentElement</BaseClass>
        <ECNavigationProperty propertyName="Repository" relationshipName="ExternalSourceIsInRepository" direction="forward" displayLabel="Repository" description="The repository in which this 'information container' is stored."/>
        <ECProperty propertyName="ConnectorName" typeName="string" displayLabel="Connector Name" description="Name of the iModel Connecter that processed this ExternalSource."/>
        <ECProperty propertyName="ConnectorVersion" typeName="string" displayLabel="Connector Version" description="Version of the iModel Connecter that processed this ExternalSource."/>
    </ECEntityClass>
    <ECRelationshipClass typeName="ExternalSourceIsInRepository" modifier="Sealed" strength="referencing" strengthDirection="forward" description="Used by ExternalSource.Repository ECNavigationProperty">
        <!-- @see ExternalSource.Repository ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="is stored in" polymorphic="true">
            <Class class="ExternalSource"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="stores" polymorphic="true">
            <Class class="RepositoryLink"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="ExternalSourceOwnsAttachments" strength="embedding" modifier="None" strengthDirection="forward" description="Relationship between an external source and its attachments">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source roleLabel ="owns" multiplicity="(0..1)" polymorphic="true">
            <Class class="ExternalSource"/>
        </Source>
        <Target roleLabel="is owned by" multiplicity="(0..*)" polymorphic="true">
            <Class class="ExternalSourceAttachment"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="ExternalSourceAttachment" displayLabel ="External Source Attachment" description="Attachment of an ExternalSource">
        <BaseClass>InformationReferenceElement</BaseClass>
        <!-- Note: The Element.Parent property + the ExternalSourceOwnsAttachments relationship is used to navigate to the owning ExternalSource -->
        <ECNavigationProperty propertyName="Attaches" relationshipName="ExternalSourceAttachmentAttachesSource" direction="forward" displayLabel="Attaches" description="The ExternalSource that is attached by this ExternalSourceAttachment"/>
        <ECProperty propertyName="Role" typeName="ExternalSourceAttachmentRole" description="If Role=SpecifyContext, the attached ExternalSource provides context. If Role=SpecifyPart, the attached ExternalSource models a part of the whole."></ECProperty>
        <ECProperty propertyName="Translation" typeName="Point3d" description="The translation or offset in global coordinates of the attached ExternalSource relative to the ExternalSource that attaches it."/>
        <ECProperty propertyName="Yaw" typeName="double" description="The Yaw angle (in degrees) of the attached ExternalSource relative to the ExternalSource that attaches it."/>
        <ECProperty propertyName="Pitch" typeName="double" description="The Pitch angle (in degrees) of the attached ExternalSource relative to the ExternalSource that attaches it."/>
        <ECProperty propertyName="Roll" typeName="double" description="The Roll angle (in degrees) of the attached ExternalSource relative to the ExternalSource that attaches it."/>
        <ECProperty propertyName="Scale" typeName="Point3d" description="The scale of the attached ExternalSource relative to the ExternalSource that attaches it."/>
    </ECEntityClass>
    <ECRelationshipClass typeName="ExternalSourceAttachmentAttachesSource" strength="referencing" strengthDirection="forward" modifier="None" description="Used by ECNavigationProperty bis:ExternalSourceAttachment.Attaches">
        <!-- @see ExternalSourceAttachment.Attaches ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="attaches" polymorphic="true">
            <Class class="ExternalSourceAttachment"/>
        </Source>
        <Target multiplicity="(1..1)" roleLabel="is attached by" polymorphic="true">
            <Class class="ExternalSource"/>
        </Target>
    </ECRelationshipClass>
    <ECEnumeration typeName="ExternalSourceAttachmentRole" backingTypeName="int" isStrict="true" displayLabel="External Source Attachment Role" description="The role that an attached ExternalSource plays, e.g. to specify context or a part-of-a-whole. Used by bis:ExternalSource.Role">
        <ECEnumerator name="SpecifyContext" displayLabel="Specify Context" value="0"/>
        <ECEnumerator name="SpecifyPart" displayLabel="Specify Part" value="1"/>
    </ECEnumeration>

    <ECEntityClass typeName="ExternalSourceGroup" modifier="None" displayLabel="External Source Group" description="A group of ExternalSources that are collectively a source of information for one or more elements.">
        <BaseClass>ExternalSource</BaseClass>
    </ECEntityClass>
    <ECRelationshipClass typeName="ExternalSourceGroupGroupsSources" modifier="Sealed" strength="referencing" strengthDirection="forward" description="Groups ExternalSources that collectively act as a source used by an ExternalSourceAspect.">
        <BaseClass>ElementGroupsMembers</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="groups" polymorphic="true">
            <Class class="ExternalSourceGroup"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is grouped by" polymorphic="true">
            <Class class="ExternalSource"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="SynchronizationConfigLink" modifier="None" displayLabel="Synchronization Configuration Link" description="Link to the Configuration for an iModel Synchronization Job">
        <BaseClass>UrlLink</BaseClass>
        <ECProperty propertyName="LastSuccessfulRun" typeName="dateTime" displayLabel="Last Successful Run" description ="Date/Time of Last Successful Run of this Synchronization Configuration">
            <ECCustomAttributes>
                <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                    <Description>The LastSuccessfulRun property is deprecated and no longer expected to be written as part of SynchronizationConfigLink instances.</Description>
                </Deprecated>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>
    <ECRelationshipClass typeName="SynchronizationConfigProcessesSources" modifier="None" strength="referencing" strengthDirection="forward" description="Records the ExternalSources processed according to a given configuration. These sources may be 'discovered' via the 'root' sources specified by bis:SynchronizationConfigSpecifiesRootSources. ExternalSources can be processed by more than one SynchronizationConfig.">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="processes" polymorphic="true">
            <Class class="SynchronizationConfigLink"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is processed by" polymorphic="true">
            <Class class="ExternalSource"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="SynchronizationConfigSpecifiesRootSources" modifier="Sealed" strength="referencing" strengthDirection="forward" description="Records the 'root' ExternalSources specified by the configuration. These roots are used to discovered other 'referenced' sources and they serve as roots of 'referencing trees' for GUI display.">
        <BaseClass>SynchronizationConfigProcessesSources</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="specifies root" polymorphic="true">
            <Class class="SynchronizationConfigLink"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is root of" polymorphic="true">
            <Class class="ExternalSource"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="FolderLink" modifier ="None" displayLabel="Folder Link" description="Represents a folder-like structure that organizes repositories (typically files) in an external system">
        <BaseClass>UrlLink</BaseClass>
    </ECEntityClass>
    <ECRelationshipClass typeName="FolderContainsFolders" displayLabel="Folder Contains Folders" modifier="None" strength="embedding" strengthDirection="forward" description="Relationship between a Folder and the sub-Folders which it contains">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source roleLabel="contains" multiplicity="(0..1)" polymorphic="true">
            <Class class="FolderLink"/>
        </Source>
        <Target roleLabel="is contained by" multiplicity="(0..*)" polymorphic="true">
            <Class class="FolderLink"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="FolderContainsRepositories" displayLabel="Folder Contains Repositories" modifier="None" strength="embedding" strengthDirection="forward" description="Relationship between a Folder and the Repositories which it contains">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source roleLabel="contains" multiplicity="(0..1)" polymorphic="true">
            <Class class="FolderLink"/>
        </Source>
        <Target roleLabel="is contained by" multiplicity="(1..*)" polymorphic="true">
            <Class class="RepositoryLink"/>
        </Target>
    </ECRelationshipClass>

    <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>
        <Source multiplicity="(1..1)" roleLabel="owns" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="is owned by" polymorphic="false">
            <Class class="ChannelRootAspect"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="ElementRefersToElements" strength="referencing" modifier="Abstract" description="A general relationship between two bis:Elements. These are typically specialized by derived relationship to give more specific meaning.">
        <!-- Creates bis_ElementRefersToElements link table -->
        <ECCustomAttributes>
            <LinkTableRelationshipMap xmlns="ECDbMap.02.00.00">
                <CreateForeignKeyConstraints>False</CreateForeignKeyConstraints>
            </LinkTableRelationshipMap>
            <ClassMap xmlns="ECDbMap.02.00.00">
                <MapStrategy>TablePerHierarchy</MapStrategy>
            </ClassMap>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
            <ReservedPropertyNames xmlns="BisCore.01.00.00">
                <PropertyNames>
                    <string>Id</string>
                    <string>ClassName</string>
                    <string>ClassFullName</string>
                    <string>SourceId</string>
                    <string>SourceClassId</string>
                    <string>TargetId</string>
                    <string>TargetClassId</string>
                </PropertyNames>
            </ReservedPropertyNames>
            <DbIndexList xmlns="ECDbMap.02.00.00">
                <Indexes>
                    <DbIndex>
                        <Name>uix_bis_ElementRefersToElements_sourcetargetclassid</Name>
                        <IsUnique>True</IsUnique>
                        <Properties>
                            <string>SourceECInstanceId</string>
                            <string>TargetECInstanceId</string>
                            <string>ECClassId</string>
                            <string>MemberPriority</string>
                        </Properties>
                    </DbIndex>
                </Indexes>
            </DbIndexList>
        </ECCustomAttributes>
        <Source multiplicity="(0..*)" roleLabel="refers to" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is referenced by" polymorphic="true">
            <Class class="Element"/>
        </Target>
        <ECProperty propertyName="MemberPriority" typeName="int" displayLabel="Member Priority" description="Can be used to prioritize or order elements being referenced. Values do not have to be unique for a particular referencing element."/>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="ElementRefersToDocuments" strength="referencing" modifier="None" description="A general relationship between a bis:Element and a bis:Document. There is no implied owner in this relationship – so it is valid for relationship where the document existed before the referenced element (e.g. design specification) or after (e.g. operational results).">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="refers to" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is referenced by" polymorphic="true">
            <Class class="Document"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="ElementGroupsMembers" strength="referencing" modifier="None" description="Represents group membership. Relates a group Element to its member Elements.">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="groups" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is grouped by" polymorphic="true">
            <Class class="Element"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="GroupImpartsToMembers" strength="referencing" modifier="None" description="Represents group membership where the group Element (and its properties) impart information about the member Elements above mere membership. Implies that properties of the group should be considered as properties of its members.">
        <BaseClass>ElementGroupsMembers</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="groups" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is grouped by" polymorphic="true">
            <Class class="Element"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="PhysicalSystemPartition" modifier="Sealed" displayLabel="Physical System Partition" description="A bis:PhysicalSystemPartition element establishes a 'Physical System' Modeling Perspective for its parent bis:Subject. A bis:PhysicalSystemPartition is always sub-modeled by a bis:PhysicalSystemModel.">
        <BaseClass>InformationPartitionElement</BaseClass>
    </ECEntityClass>

    <ECEntityClass typeName="PhysicalSystemModel" displayLabel="Physical System Model" description="A container for persisting bis:PhysicalSystem elements.">
        <BaseClass>InformationModel</BaseClass>
    </ECEntityClass>

    <ECEntityClass typeName="PhysicalSystem" modifier="Abstract" displayLabel="Physical System" description="A collection of connected `SpatialElements` (primarily `PhysicalElements`) that collectively implement some function.">
        <BaseClass>GroupInformationElement</BaseClass>
        <ECNavigationProperty propertyName="AggregatingSystem" displayLabel="Aggregator" relationshipName="PhysicalSystemAggregatesSubSystems" direction="Backward" description="The aggregator of this sub-system within the System hierarchy."/>
    </ECEntityClass>

    <ECRelationshipClass typeName="PhysicalSystemAggregatesSubSystems" modifier="None" strength="referencing" displayLabel="Physical System Aggregates Sub-Systems" description="Forms the Physical System hierarchy.">
        <!-- @see PhysicalSystem.AggregatingSystem -->
        <Source multiplicity="(0..1)" roleLabel="aggregates" polymorphic="true">
            <Class class="PhysicalSystem"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is aggregated by" polymorphic="true">
            <Class class="PhysicalSystem"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="PhysicalSystemGroupsMembers" strength="referencing" modifier="None" displayLabel="Physical System Groups Spatial Elements" description="A relationship used to identify the bis:PhysicalElements that are members of a PhysicalSystem.">
        <BaseClass>ElementGroupsMembers</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="groups" polymorphic="true">
            <Class class="PhysicalSystem"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is grouped by" polymorphic="true">
            <!-- NOTE: Primarily intended for bis:PhysicalElements but bis:SpatialLocationElements are allowed. -->
            <Class class="SpatialElement"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="PhysicalSystemServicesSpatialElements" strength="referencing" modifier="None" displayLabel="Physical System Services Spatial Elements" description="A relationship used to identify the bis:SpatialElements serviced by a PhysicalSystem.">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="services" polymorphic="true">
            <Class class="PhysicalSystem"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is serviced by" polymorphic="true">
            <Class class="SpatialElement"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="ElementDrivesElement" description="A relationship that indicates that the source Element drives (controls the lifecycle or structure of) a dependent target Element." strength="referencing" modifier="None">
        <!-- Creates bis_ElementDrivesElement link table -->
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <ClassMap xmlns="ECDbMap.02.00.00">
                <!-- We must insist that all instances of all possible subclasses are stored together in a single table.
                     TxnManager knows about this table, and expects to find all instances this kind of relationship there. -->
                <MapStrategy>TablePerHierarchy</MapStrategy>
            </ClassMap>
            <ShareColumns xmlns="ECDbMap.02.00.00">
                <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
                <ApplyToSubclassesOnly>True</ApplyToSubclassesOnly>
            </ShareColumns>
            <LinkTableRelationshipMap xmlns="ECDbMap.02.00.00">
                <CreateForeignKeyConstraints>False</CreateForeignKeyConstraints>
            </LinkTableRelationshipMap>
            <ReservedPropertyNames xmlns="BisCore.01.00.00">
                <PropertyNames>
                    <string>Id</string>
                    <string>ClassName</string>
                    <string>ClassFullName</string>
                    <string>SourceId</string>
                    <string>SourceClassId</string>
                    <string>TargetId</string>
                    <string>TargetClassId</string>
                </PropertyNames>
            </ReservedPropertyNames>
        </ECCustomAttributes>
        <Source multiplicity="(0..*)" roleLabel="drives" polymorphic="true">
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is driven by" polymorphic="true">
            <Class class="Element"/>
        </Target>
        <ECProperty propertyName="Status" typeName="int" description="Bits that indicate the status of the dependency. Satisfied=0, Failed=1, Deferred=128. Deferred and Failed bits can be OR-ed together."/>
        <ECProperty propertyName="Priority" typeName="int" description="The priority of this dependency, relative to other ElementDrivesElement instances. Note that ElementOwnsChildElements dependencies always take priority over ElementDrivesElement dependencies."/>
    </ECRelationshipClass>

    <ECEntityClass typeName="Category" modifier="Abstract" description="A bis:Category categorizes a bis:GeometricElement and its geometry. Every bis:GeometricElement is in one and only one bis:Category. The visibility (on/off) of a bis:Category may be controlled per-view. Categories are similar to levels in DGN, layers in DWG, and categories in RVT.">
        <BaseClass>DefinitionElement</BaseClass>
        <BaseClass>IParentElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" displayLabel="Description" description="A human-readable description of the Category">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Rank" typeName="DefinitionElementRank" description="The Rank of a category indicates how it was created, who is aware of it and where it can be used.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>
    <ECEntityClass typeName="DrawingCategory" modifier="Sealed" displayLabel="Drawing Category" description="A bis:DrawingCategory is used for classifying bis:GeometricElement2d elements via the bis:GeometricElement2dIsInCategory (concrete and sealed) relationship.">
        <BaseClass>Category</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="SpatialCategory" modifier="Sealed" displayLabel="Spatial Category" description="A bis:SpatialCategory is used for classifying bis:GeometricElement3d elements via the bis:GeometricElement3dIsInCategory (concrete and sealed) relationship.">
        <BaseClass>Category</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECRelationshipClass typeName="CategoryOwnsSubCategories" strength="embedding" modifier="None">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="owns" polymorphic="true">
            <Class class="Category"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by" polymorphic="false">
            <Class class="SubCategory"/>
        </Target>
    </ECRelationshipClass>
    <ECEntityClass typeName="SubCategory" modifier="Sealed" displayLabel="Sub-Category" description="A bis:SubCategory is a subdivision of a bis:Category. SubCategories allow GeometricElements to have multiple pieces of Geometry that can be independently visible and styled (color, linesStyle, transparency, etc.). It is important to understand that a bis:SubCategory is not a bis:Category (i.e. Categories do not nest). bis:GeometricElements are always related to a bis:Category, not a bis:SubCategory.">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" description="A human-readable description of the SubCategory">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Properties" typeName="string" extendedTypeName="Json" description="Contains the display properties (color, style, weight, etc.) for the SubCategory. It should not be used for the persistence of application-specific information.">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Rank" typeName="DefinitionElementRank" description="The Rank of a SubCategory indicates how it was created, who is aware of it and where it can be used.">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECRelationshipClass typeName="GeometricElement2dIsInCategory" strength="referencing" strengthDirection="backward" modifier="Sealed" description="The relationship that determines the bis:DrawingCategory for a bis:GeometricElement2d.">
        <!-- @see GeometricElement2d.Category ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="is in" polymorphic="true">
            <Class class="GeometricElement2d" />
        </Source>
        <Target multiplicity="(1..1)" roleLabel="categorizes" polymorphic="false">
            <Class class="DrawingCategory"/>
        </Target>
    </ECRelationshipClass>
    <ECRelationshipClass typeName="GeometricElement3dIsInCategory" strength="referencing" strengthDirection="backward" modifier="Sealed" description="The relationship that determines the bis:SpatialCategory for a bis:GeometricElement3d.">
        <!-- @see GeometricElement3d.Category ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="is in" polymorphic="true">
            <Class class="GeometricElement3d" />
        </Source>
        <Target multiplicity="(1..1)" roleLabel="categorizes" polymorphic="false">
            <Class class="SpatialCategory"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="ColorBook" modifier="Sealed" displayLabel="Color Book">
        <!-- Individual colors stored in JsonProperties -->
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" description="A human-readable description of the ColorBook"/>
    </ECEntityClass>

    <ECEntityClass typeName="RenderMaterial" modifier="Sealed" displayLabel="Render Material" description="A bis:RenderMaterial defines the rendering properties of materials for display. Not to be confused with a bis:PhysicalMaterial.">
        <!-- 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. -->
        <BaseClass>DefinitionElement</BaseClass>
        <BaseClass>IParentElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="PaletteName" typeName="string" description="The palette name that categorizes this RenderMaterial."/>
        <ECProperty propertyName="Description" typeName="string" description="A human-readable description of the RenderMaterial"/>
    </ECEntityClass>
    <ECRelationshipClass typeName="RenderMaterialOwnsRenderMaterials" strength="embedding" modifier="None">
        <BaseClass>ElementOwnsChildElements</BaseClass>
        <Source multiplicity="(0..1)" roleLabel="owns child" polymorphic="false">
            <Class class="RenderMaterial"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is owned by parent" polymorphic="false">
            <Class class="RenderMaterial"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="PhysicalMaterial" modifier="Abstract" displayLabel="Physical Material" description="A bis:PhysicalMaterial defines the matter of which physical objects are made. bis:PhysicalMaterials are not used to define rendering characteristics (see bis:RenderMaterial).">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Density" typeName="double" minimumValue="0.0"/>
        <ECNavigationProperty propertyName="RenderMaterial" relationshipName="RenderMaterialSupportsDisplayOfPhysicalMaterial" direction="backward" displayLabel="Render Material" description="Optionally refers to the bis:RenderMaterial to be used to display the bis:PhysicalMaterial."/>
    </ECEntityClass>

    <ECRelationshipClass typeName="RenderMaterialSupportsDisplayOfPhysicalMaterial" strength="referencing" strengthDirection="backward" modifier="Sealed" description="The relationship that determines the bis:RenderMaterial to use while displaying a bis:PhysicalMaterial.">
        <!-- @see PhysicalMaterial.RenderMaterial ECNavigationProperty -->
        <Source multiplicity="(0..1)" roleLabel="supports display of" polymorphic="false">
            <Class class="RenderMaterial" />
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is displayed using" polymorphic="true">
            <Class class="PhysicalMaterial"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="AnnotationTextStyle" modifier="Sealed" displayLabel="Annotation Text Style">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" description="Description of the style">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Settings" typeName="string" extendedTypeName="Json" description="Settings of the style">
            <ECCustomAttributes>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Data" typeName="binary" description="Encoded style properties">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
                <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                    <Description>The `Data` property is deprecated and replaced by the `Settings` property.</Description>
                </Deprecated>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="AnnotationFrameStyle" modifier="Sealed" displayLabel="Annotation Frame Style">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" description="Description of the style">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Data" typeName="binary" description="Encoded style properties">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="AnnotationLeaderStyle" modifier="Sealed" displayLabel="Annotation Leader Style">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" description="Description of the style">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Data" typeName="binary" description="Encoded style properties">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="TextAnnotationSeed" modifier="Sealed" displayLabel="Text Annotation Seed">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" description="Description of the style">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Data" typeName="binary" description="Encoded style properties">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="AnnotationDimensionStyle" modifier="Sealed" displayLabel="Annotation Dimension Style" description="A bis:DefinitionElement that defines the appearance of a bis:DimensionAnnotation2d.">
        <BaseClass>DefinitionElement</BaseClass>
        <ECNavigationProperty propertyName="TextStyle" relationshipName="DimensionStyleUsesTextStyle" direction="Forward" displayLabel="Text Style" description="The bis:AnnotationTextStyle used by the bis:AnnotationDimensionStyle."/>
        <ECProperty propertyName="Settings" typeName="string" extendedTypeName="Json" description="Settings of the style" />
        <ECProperty propertyName="Description" typeName="string" description="Description of the style" />
    </ECEntityClass>  

    <ECRelationshipClass typeName="DimensionStyleUsesTextStyle" strength="referencing" modifier="Sealed" description="A relationship indicating that the source AnnotationDimensionStyle instance uses the target AnnotationTextStyle instance.">
        <Source multiplicity="(0..*)" roleLabel="is styled by" polymorphic="true">
            <Class class="AnnotationDimensionStyle"/>
        </Source>
        <Target multiplicity="(0..1)" roleLabel="styles" polymorphic="false">
            <Class class="AnnotationTextStyle"/>
        </Target>
    </ECRelationshipClass> 

    <ECEntityClass typeName="LineStyle" modifier="Sealed" displayLabel="Line Style">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" description="Description of the style" />
        <ECProperty propertyName="Data" typeName="string" extendedTypeName="Json" description="Encoded style properties" />
    </ECEntityClass>

    <ECEnumeration typeName="TextureFormat" backingTypeName="int" isStrict="false" description="Supported Formats for texture data.">
        <ECEnumerator value="0" name="Jpeg" displayLabel="Jpeg"/>
        <ECEnumerator value="2" name="Png" displayLabel="Png"/>
    </ECEnumeration>

    <ECEntityClass typeName="Texture" modifier="Sealed" description="A bis:Texture represents a named texture used for rendering purposes. The texture data is stored as a binary blob interpreted according to the specified texture format.">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" description="A human-readable description of the Texture">
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Data" typeName="binary" description="Encoded texture data">
            <ECCustomAttributes>
                <!-- IsNullable=False -->
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Format" typeName="TextureFormat" description="Format of the encoded texture data.">
            <ECCustomAttributes>
                <!-- IsNullable=False -->
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Width" typeName="int" displayLabel="Width" description="Image width in pixels.">
            <ECCustomAttributes>
                <!-- IsNullable=False -->
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Height" typeName="int" displayLabel="Height" description="Image height in pixels.">
            <ECCustomAttributes>
                <!-- IsNullable=False -->
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Flags" typeName="int" description="Currently unused and always zero.">
            <ECCustomAttributes>
                <!-- IsNullable=False -->
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="LightLocation" modifier="Sealed" displayLabel="Light Location" description="The spatial location of a light source">
        <BaseClass>SpatialLocationElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Enabled" typeName="boolean" displayLabel="Is light turned on" description="Indicates that the light is on."/>
    </ECEntityClass>

    <ECEnumeration typeName="SectionType" backingTypeName="int" isStrict="false">
        <ECEnumerator value="3" name="Section" displayLabel="Section"/>
        <ECEnumerator value="4" name="Detail" displayLabel="Detail"/>
        <ECEnumerator value="5" name="Elevation" displayLabel="Elevation"/>
        <ECEnumerator value="6" name="Plan" displayLabel="Plan"/>
    </ECEnumeration>
    
    <ECEntityClass typeName="SectionDrawingLocation" displayLabel="Section Drawing Location" description="The spatial location of a section drawing generated from a SpatialViewDefinition.">
        <BaseClass>SpatialLocationElement</BaseClass>
        <ECNavigationProperty propertyName="SectionView" relationshipName="SectionDrawingLocationRefersToSectionView" direction="forward" displayLabel="Section View" description="The section view generated from the SpatialViewDefinition."/>
    </ECEntityClass>

    <ECRelationshipClass typeName="SectionDrawingLocationRefersToSectionView" strengthDirection="backward" strength="referencing" modifier="Sealed" description="Relates a SectionDrawingLocation to the view generated by the section's SpatialViewDefinition.">
        <!-- @see SectionDrawingLocation.SectionView ECNavigationProperty -->
        <Source multiplicity="(0..*)" polymorphic="true" roleLabel="refers to">
            <Class class="SectionDrawingLocation"/>
        </Source>
        <Target multiplicity="(1..1)" polymorphic="true" roleLabel="is referenced by">
            <Class class="ViewDefinition"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="SectionLocation" displayLabel="Section Location" description="DEPRECATED: The section location defines how a section drawing should be generated in a 3d view.">
        <BaseClass>SpatialLocationElement</BaseClass>
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>The SectionLocation class is deprecated and is replaced by SectionDrawingLocation.</Description>
            </Deprecated>
        </ECCustomAttributes>
        <ECProperty propertyName="SectionType" typeName="SectionType" displayLabel="Section Type" description="Type of the section: e.g. Section, Plan, Elevation, Detail."/>
        <ECProperty propertyName="ClipGeometry" typeName="string" extendedTypeName="Json" displayLabel="Clip Geometry" description="Details on how this section was clipped."/>
        <ECNavigationProperty propertyName="ModelSelector" relationshipName="SectionLocationUsesModelSelector" direction="forward" displayLabel="Model Selector" description="Describes the models relevant for this section location display."/>
        <ECNavigationProperty propertyName="CategorySelector" relationshipName="SectionLocationUsesCategorySelector" direction="forward" displayLabel="Category Selector" description="Describes the categories relevant for this section location display."/>
        <ECNavigationProperty propertyName="ViewAttachment" relationshipName="SectionLocationRefersToViewAttachment" direction="forward"  displayLabel="Describes the view attachment attached to this section location"/>
    </ECEntityClass>

    <ECRelationshipClass typeName="SectionLocationUsesModelSelector" strength="referencing" modifier="Sealed" description="DEPRECATED: Relates a SectionLocation to the models relevant for this SectionLocation display.">
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>The SectionLocation class and associated relationships are deprecated and are replaced by SectionDrawingLocation.</Description>
            </Deprecated>
        </ECCustomAttributes>
        <Source multiplicity="(0..*)" roleLabel="uses" polymorphic="true">
            <Class class="SectionLocation"/>
        </Source>
        <Target multiplicity="(1..1)" roleLabel="is used by" polymorphic="true">
            <Class class="ModelSelector"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="SectionLocationUsesCategorySelector" strength="referencing" modifier="Sealed" description="DEPRECATED: Relates a SectionLocation to the categories relevant for this SectionLocation display.">
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>The SectionLocation class and associated relationships are deprecated and are replaced by SectionDrawingLocation.</Description>
            </Deprecated>
        </ECCustomAttributes>
        <Source multiplicity="(0..*)" roleLabel="uses" polymorphic="true">
            <Class class="SectionLocation"/>
        </Source>
        <Target multiplicity="(1..1)" roleLabel="is used by" polymorphic="true">
            <Class class="CategorySelector"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="SectionLocationRefersToViewAttachment" strengthDirection="backward" strength="referencing" modifier="Sealed" description="DEPRECATED: Relates a SectionLocation to a ViewAttachment placing the section's DrawingViewDefinition onto a Sheet.">
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>The SectionLocation class and associated relationships are deprecated and are replaced by SectionDrawingLocation.</Description>
            </Deprecated>
        </ECCustomAttributes>
        <Source multiplicity="(0..*)" polymorphic="true" roleLabel="refers to" >
            <Class class="SectionLocation"/>
        </Source>
        <Target multiplicity="(0..1)" polymorphic="true" roleLabel="is referenced by" >
            <Class class="ViewAttachment"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="BaseModelForView2d" strength="referencing" modifier="Sealed">
        <!-- @see ViewDefinition2d.BaseModel ECNavigationProperty -->
        <Source multiplicity="(1..1)" roleLabel="is base model for" polymorphic="true">
            <Class class="GeometricModel2d"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="has base" polymorphic="true">
            <Class class="ViewDefinition2d"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="SpatialViewDefinitionUsesModelSelector" strength="referencing" modifier="Sealed">
        <!-- @see SpatialViewDefinition.ModelSelector ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="uses" polymorphic="true">
            <Class class="SpatialViewDefinition"/>
        </Source>
        <Target multiplicity="(1..1)" roleLabel="is used by" polymorphic="true">
            <Class class="ModelSelector"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="ViewDefinitionUsesCategorySelector" strength="referencing" modifier="Sealed">
        <!-- @see ViewDefinition.CategorySelector ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="uses" polymorphic="true">
            <Class class="ViewDefinition"/>
        </Source>
        <Target multiplicity="(1..1)" roleLabel="is used by" polymorphic="false">
            <Class class="CategorySelector"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="ViewDefinitionUsesDisplayStyle" strength="referencing" modifier="Sealed">
        <!-- @see ViewDefinition.DisplayStyle ECNavigationProperty -->
        <Source multiplicity="(0..*)" roleLabel="uses" polymorphic="true">
            <Class class="ViewDefinition"/>
        </Source>
        <Target multiplicity="(1..1)" roleLabel="is used by" polymorphic="true">
            <Class class="DisplayStyle"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="CategorySelectorRefersToCategories" strength="referencing" modifier="Sealed">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="refers to" polymorphic="true">
            <Class class="CategorySelector"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is referenced by" polymorphic="true">
            <Class class="Category"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="PartitionOriginatesFromRepository" strength="referencing" modifier="Sealed" description="DEPRECATED: Use ElementHasLinks">
        <ECCustomAttributes>
            <Deprecated xmlns="CoreCustomAttributes.01.00.03">
                <Description>Use ElementHasLinks.</Description>
            </Deprecated>
        </ECCustomAttributes>
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="originates from" polymorphic="true">
            <Class class="InformationPartitionElement"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is origin of" polymorphic="true">
            <Class class="RepositoryLink"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="ModelSelectorRefersToModels" strength="referencing" modifier="Sealed">
        <!-- Creates the bis_ModelSelectorRefersToModels link table -->
        <ECCustomAttributes>
            <LinkTableRelationshipMap xmlns="ECDbMap.02.00.00">
                <CreateForeignKeyConstraints>False</CreateForeignKeyConstraints>
            </LinkTableRelationshipMap>
        </ECCustomAttributes>
        <Source multiplicity="(0..*)" roleLabel="refers to" polymorphic="true">
            <Class class="ModelSelector"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is referenced by" polymorphic="true">
            <Class class="Model"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="ModelSelector" displayLabel="Model Selector" description="Specifies the list of 3d models displayed by a SpatialViewDefinition. Multiple SpatialViewDefinitions may point to the same ModelSelector.">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
        <!-- Note: The Models in the selector are actually captured by the ModelSelectorRefersToModels ECRelationship -->
    </ECEntityClass>

    <ECEntityClass typeName="CategorySelector" displayLabel="Category Selector" description="Specifies the list of categories displayed by a ViewDefinition. Multiple ViewDefinitions may point to the same CategorySelector.">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
        <!-- Note: The Categories in the selector are actually captured by the CategorySelectorRefersToCategories ECRelationship -->
    </ECEntityClass>

    <ECEntityClass typeName="DisplayStyle" modifier="Abstract" displayLabel="Display Style" description="A bis:DisplayStyle defines the 'styling' parameters for rendering the contents of a view. It determines how graphics are rendered, not which elements are rendered. A bis:DisplayStyle can be shared by many Views.">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03"/>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="DisplayStyle2d" displayLabel="2D Display Style" description="A bis:DisplayStyle2d defines the 'styling' parameters for rendering the contents of a 2D View.">
        <BaseClass>DisplayStyle</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="DisplayStyle3d" displayLabel="3D Display Style" description="A bis:DisplayStyle3d defines the 'styling' parameters for rendering the contents of a 3D View.">
        <BaseClass>DisplayStyle</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="RenderTimeline" displayLabel="Render Timeline" description="Timeline information for rendering and visualizing animations and schedule simulations.">
        <BaseClass>InformationRecordElement</BaseClass>
        <ECProperty propertyName="Description" typeName="string" description="An optional, human-readable description of the Render Timeline"/>
        <ECProperty propertyName="Script" typeName="string" extendedTypeName="Json" description="A JSON string containing the timeline and rendering instructions"/>
    </ECEntityClass>

    <ECEntityClass typeName="ViewDefinition" modifier="Abstract" displayLabel="View Definition" description="A bis:ViewDefinition specifies the area/volume that is viewed, and refers to a bis:DisplayStyle and a bis:CategorySelector to be used. Subclasses of bis:ViewDefinition determine which model(s) are viewed.">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Description" typeName="string" description="A human-readable description of the View Definition"/>
        <ECNavigationProperty propertyName="CategorySelector" relationshipName="ViewDefinitionUsesCategorySelector" direction="forward" displayLabel="Category Selector">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECNavigationProperty>
        <ECNavigationProperty propertyName="DisplayStyle" relationshipName="ViewDefinitionUsesDisplayStyle" direction="forward" displayLabel="Display Style">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECNavigationProperty>
    </ECEntityClass>

    <ECEntityClass typeName="ViewDefinition3d" modifier="Abstract" displayLabel="3D View Definition" description="A bis:ViewDefinition3d specifies the volume that is viewed on referenced 3D bis:Models. It refers to a bis:DisplayStyle3d and a bis:CategorySelector to be used.">
        <BaseClass>ViewDefinition</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
        <ECProperty propertyName="Origin" typeName="Point3d" description="Origin of the viewed volume on the lower, back, rear">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Extents" typeName="Point3d" description="Size of the view diagonal">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Yaw" typeName="double" description="Yaw component of the view direction in degrees">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Pitch" typeName="double" description="Pitch component of the view direction in degrees">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Roll" typeName="double" description="Roll component of the view direction in degrees">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="IsCameraOn" typeName="boolean" displayLabel="Is Camera On" description="Is the camera actually turned on?">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="EyePoint" typeName="Point3d" displayLabel="Eye Point" description="Camera eye point">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="LensAngle" typeName="double" displayLabel="Lens Angle" description="Camera lens angle in degrees">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="FocusDistance" typeName="double" displayLabel="Focus Distance" description="Camera focus distance">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="SpatialViewDefinition" displayLabel="Spatial View Definition" description="A view of a spatially located volume.">
        <BaseClass>ViewDefinition3d</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
        <ECNavigationProperty propertyName="ModelSelector" relationshipName="SpatialViewDefinitionUsesModelSelector" direction="forward" displayLabel="Model Selector">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECNavigationProperty>
    </ECEntityClass>

    <ECEntityClass typeName="OrthographicViewDefinition" displayLabel="Orthographic Spatial View" description="A spatial view that always shows a parallel projection.">
        <BaseClass>SpatialViewDefinition</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="ViewDefinition2d" modifier="Abstract" displayLabel="2D View Definition" description="A view of a 2D model that has its own local coordinate system.">
        <BaseClass>ViewDefinition</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
        <ECNavigationProperty propertyName="BaseModel" relationshipName="BaseModelForView2d" direction="backward" displayLabel="Base Model">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECNavigationProperty>
        <ECProperty propertyName="Origin" typeName="Point2d" description="Lower left corner of the viewed area.">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="Extents" typeName="Point2d" description="Size of the view diagonal">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="RotationAngle" typeName="double" displayLabel="Rotation Angle" description="Rotation angle in degrees of the viewed area.">
            <ECCustomAttributes><CustomHandledProperty xmlns="BisCore.01.00.16"/></ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECEntityClass typeName="DrawingViewDefinition" displayLabel="Drawing View Definition"  description="A bis:DrawingViewDefinition specifies parameters for a view of a bis:DrawingModel.">
        <BaseClass>ViewDefinition2d</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="SheetViewDefinition" displayLabel="Sheet View Definition" description="A bis:SheetViewDefinition specifies parameters for a view of a bis:SheetModel.">
        <BaseClass>ViewDefinition2d</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="TemplateViewDefinition2d" displayLabel="2D Template View Definition" description="A bis:ViewDefinition2d used to display a 2D template model.">
        <!-- Note: TemplateViewController2d determines which model to view (the model to view is not persisted in this view definition) -->
        <BaseClass>ViewDefinition2d</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>
    <ECEntityClass typeName="TemplateViewDefinition3d" displayLabel="3D Template View Definition" description="A bis:ViewDefinition3d used to display a 3D template model.">
        <!-- Note: TemplateViewController3d determines which model to view (the model to view is not persisted in this view definition) -->
        <BaseClass>ViewDefinition3d</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECRelationshipClass typeName="ElementHasLinks" strength="referencing" modifier="None" description="Associates bis:LinkElements to a bis:Element.">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(1..*)" roleLabel="has" polymorphic="true">
            <!-- WIP: (0..*)? -->
            <Class class="Element"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is referenced by" polymorphic="true">
            <Class class="LinkElement"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="RoleElement" modifier="Abstract" displayLabel="Role Element" description="A bis:Element and abstract base class used to model roles assumed by an Entity that is not intrinsic to the Entity playing the role.">
        <BaseClass>Element</BaseClass>
        <ECCustomAttributes>
            <ClassHasHandler xmlns="BisCore.01.00.00"/>
            <JoinedTablePerDirectSubclass xmlns="ECDbMap.02.00.00"/>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03">
                <Exceptions>
                    <string>Functional:FunctionalElement</string>
                    <string>Asset:AssetElement</string>
                </Exceptions>
            </NotSubclassableInReferencingSchemas>
        </ECCustomAttributes>
    </ECEntityClass>

    <ECEntityClass typeName="SpatialIndex" modifier="Sealed" displayLabel="Spatial Index" description="The Spatial Index contains information used to optimize spatial queries. Like other database indices, it is automatically maintained by the system.">
        <ECCustomAttributes>
            <ClassMap xmlns="ECDbMap.02.00.00">
                <MapStrategy>ExistingTable</MapStrategy>
                <TableName>dgn_SpatialIndex</TableName> <!-- Must match DGN_VTABLE_SpatialIndex #define -->
                <ECInstanceIdColumn>ElementId</ECInstanceIdColumn>
            </ClassMap>
        </ECCustomAttributes>
        <ECProperty propertyName="MinX" typeName="double" readOnly="true" displayLabel="Min X" description="Minimum X value of the axis-aligned range box that encloses the spatial element"/>
        <ECProperty propertyName="MaxX" typeName="double" readOnly="true" displayLabel="Max X" description="Maximum X value of the axis-aligned range box that encloses the spatial element"/>
        <ECProperty propertyName="MinY" typeName="double" readOnly="true" displayLabel="Min Y" description="Minimum Y value of the axis-aligned range box that encloses the spatial element"/>
        <ECProperty propertyName="MaxY" typeName="double" readOnly="true" displayLabel="Max Y" description="Maximum Y value of the axis-aligned range box that encloses the spatial element"/>
        <ECProperty propertyName="MinZ" typeName="double" readOnly="true" displayLabel="Min Z" description="Minimum Z value of the axis-aligned range box that encloses the spatial element"/>
        <ECProperty propertyName="MaxZ" typeName="double" readOnly="true" displayLabel="Max Z" description="Maximum Z value of the axis-aligned range box that encloses the spatial element"/>
    </ECEntityClass>

    <ECEntityClass typeName="GeometryPart" displayLabel="Geometry Part" description="A bis:DefinitionElement that specifies a collection of geometry that is meant to be reused across bis:GeometricElement instances. Leveraging bis:GeometryParts can help reduce file size and improve display performance.">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
        <ECProperty propertyName="GeometryStream" typeName="binary" extendedTypeName="GeometryStream" displayLabel="Geometry Stream" description="The actual geometry of the Geometry Part">
            <!-- IsNullable = False -->
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
                <HiddenProperty xmlns="CoreCustomAttributes.01.00.03"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="BBoxLow" typeName="point3d" displayLabel="Bounding Box Low" description="The low corner of the Geometry Part's bounding box.">
            <!-- IsNullable = False -->
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
        <ECProperty propertyName="BBoxHigh" typeName="point3d" displayLabel="Bounding Box High" description="The high corner of the Geometry Part's bounding box">
            <!-- IsNullable = False -->
            <ECCustomAttributes>
                <CustomHandledProperty xmlns="BisCore.01.00.16"/>
            </ECCustomAttributes>
        </ECProperty>
    </ECEntityClass>

    <ECRelationshipClass typeName="DrawingGraphicRepresentsElement" strength="referencing" modifier="None" description="Relates a bis:DrawingGraphic to the bis:Element that it represents.">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="represents" polymorphic="true">
            <Class class="DrawingGraphic"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is represented by" polymorphic="true">
            <Class class="Element"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="GraphicalElement3dRepresentsElement" strength="referencing" modifier="None" description="Relates a bis:GraphicalElement3d to the bis:Element that it represents.">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="represents" polymorphic="true">
            <Class class="GraphicalElement3d"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is represented by" polymorphic="true">
            <Class class="Element"/>
        </Target>
    </ECRelationshipClass>

    <ECRelationshipClass typeName="SpatialLocationElementRepresentsElement" strength="referencing" modifier="None" description="Relates a bis:SpatialLocationElement to the bis:Element that it represents.">
        <BaseClass>ElementRefersToElements</BaseClass>
        <Source multiplicity="(0..*)" roleLabel="represents" polymorphic="true">
            <Class class="SpatialLocationElement"/>
        </Source>
        <Target multiplicity="(0..*)" roleLabel="is represented by" polymorphic="true">
            <Class class="Element"/>
        </Target>
    </ECRelationshipClass>

    <ECEntityClass typeName="AuxCoordSystem" modifier="Abstract" displayLabel="Auxiliary Coordinate System">
        <BaseClass>DefinitionElement</BaseClass>
        <ECCustomAttributes>
            <NotSubclassableInReferencingSchemas xmlns="CoreCustomAttributes.01.00.03"/>
        </ECCustomAttributes>
        <ECProperty propertyName="Type" typeName="int" description="See the ACSType enum. None = 0;  Rectangular = 1; Cylindrical = 2; Spherical = 3."/>
        <ECProperty propertyName="Description" typeName="string" description="A human-readable description of the Auxiliary Coordinate System"/>
    </ECEntityClass>
    <ECEntityClass typeName="AuxCoordSystem2d" displayLabel="2D Auxiliary Coordinate System" description="A 2D coordinate system.">
        <BaseClass>AuxCoordSystem</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
        <ECProperty propertyName="Origin" typeName="Point2d" description="Defines the real location of the 0, 0 coordinate of the ACS."/>
        <ECProperty propertyName="Angle" typeName="double" description="The angle (in degrees) of the Coordinate System"/>
    </ECEntityClass>
    <ECEntityClass typeName="AuxCoordSystem3d" displayLabel="3D Auxiliary Coordinate System" description="A 3D coordinate system.">
        <BaseClass>AuxCoordSystem</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
        <ECProperty propertyName="Origin" typeName="Point3d" description="Defines the plane of the ACS and the real location of the 0, 0, 0 coordinate of the ACS."/>
        <ECProperty propertyName="Yaw" typeName="double" description="The Yaw angle (in degrees) of the orientation of this Coordinate System"/>
        <ECProperty propertyName="Pitch" typeName="double" description="The Pitch angle (in degrees) of the orientation of this Coordinate System"/>
        <ECProperty propertyName="Roll" typeName="double" description="The Roll angle (in degrees) of the orientation of this Coordinate System"/>
    </ECEntityClass>
    <ECEntityClass typeName="AuxCoordSystemSpatial" displayLabel="Spatial Auxiliary Coordinate System" description="A spatial coordinate system.">
        <BaseClass>AuxCoordSystem3d</BaseClass>
        <ECCustomAttributes><ClassHasHandler xmlns="BisCore.01.00.00"/></ECCustomAttributes>
    </ECEntityClass>
 </ECSchema>
