<?xml version="1.0" encoding="utf-8" ?>
<ServerExplorerTree>
  <Node Name="Server" LocLabel="SR.SchemaHierarchy_Server" Image="Server">
    <Child Name="Databases"/>
    <Child Name="ServerLevelSecurity"/>
    <Child Name="ServerLevelServerObjects"/>
  </Node>
  <Node Name="Databases" LocLabel="SR.SchemaHierarchy_Databases" IsAsyncLoad="" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlDatabase" TreeNode="DatabaseTreeNode">
    <Filters >
      <Filter Property="IsSystemObject" Value="0" Type="bool" />
    </Filters>
    <Properties>
      <Property Name="Status" ValidFor="All"/>
      <!--IsLedger property check is disabled on Azure databases to avoid making connections to databases individually
       when listing databases in Object Explorer since it's value is not available from 'master' DB for all databases.-->
      <Property Name="IsLedger" ValidFor="Sql2022OrHigher"/>
    </Properties>
    <Child Name="SystemDatabases" IsSystemObject="1"/>
  </Node>
  <Node Name="ServerLevelSecurity" LocLabel="SR.SchemaHierarchy_Security" BaseClass="ModelBased" ValidFor="All">
    <Child Name="ServerLevelLinkedServerLogins"/>
    <Child Name="ServerLevelLogins"/>
    <Child Name="ServerLevelServerRoles"/>
    <Child Name="ServerLevelCredentials"/>
    <Child Name="ServerLevelCryptographicProviders"/>
    <Child Name="ServerLevelServerAudits"/>
    <Child Name="ServerLevelServerAuditSpecifications"/>
    <!-- TODO Support XEvents in .Net Core SMO
    <Child Name="ServerLevelEventSessions"/>
    -->
  </Node>
  <Node Name="ServerLevelServerObjects" LocLabel="SR.SchemaHierarchy_ServerObjects" BaseClass="ModelBased" NodeType="ServerLevelServerObject" ValidFor="AllOnPrem">
    <Child Name="ServerLevelEndpoints"/>
    <Child Name="ServerLevelLinkedServers"/>
    <Child Name="ServerLevelServerTriggers"/>
    <Child Name="ServerLevelErrorMessages"/>
    <!-- TODO Support XEvents in .Net Core SMO
    <Child Name="ServerLevelEventNotifications"/>
    -->
  </Node>

  <Node Name="SystemDatabases" LocLabel="SR.SchemaHierarchy_SystemDatabases" BaseClass="ModelBased"  NodeType="SystemDatabase" ChildQuerierTypes="SqlDatabase" Strategy="MultipleElementsOfType" TreeNode="DatabaseTreeNode" ValidFor="All">
    <Filters >
      <Filter Property="IsSystemObject" Value="1" Type="bool" />
    </Filters>
  </Node>
  <!-- TODO Support XEvents in .Net Core SMO
  <Node Name="ServerLevelEventSessions" LocLabel="SR.SchemaHierarchy_EventSessions" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlEventSession" ValidFor="Sql2008OrHigher"/>
  <Node Name="ServerLevelEventNotifications" LocLabel="SR.SchemaHierarchy_ServerEventNotifications" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlServerEventNotification"/>
  -->

  <Node Name="ServerLevelLinkedServerLogins" LocLabel="SR.SchemaHierarchy_LinkedServerLogins" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="ServerLevelLinkedServerLogin" ChildQuerierTypes="SqlLinkedServerLogin" ValidFor="AllOnPrem"/>
  <Node Name="ServerLevelLogins" LocLabel="SR.SchemaHierarchy_Logins" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="ServerLevelLogin" ChildQuerierTypes="SqlLogin"/>
  <Node Name="ServerLevelServerRoles" LocLabel="SR.SchemaHierarchy_ServerRoles" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="ServerLevelServerRole" ChildQuerierTypes="SqlServerRole" ValidFor="AllOnPrem"/>
  <Node Name="ServerLevelCredentials" LocLabel="SR.SchemaHierarchy_Credentials" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="ServerLevelCredential" ChildQuerierTypes="SqlCredential" ValidFor="AllOnPrem"/>
  <Node Name="ServerLevelCryptographicProviders" LocLabel="SR.SchemaHierarchy_CryptographicProviders" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="ServerLevelCryptographicProvider" ChildQuerierTypes="SqlCryptographicProvider"  ValidFor="AllOnPrem"/>
  <Node Name="ServerLevelServerAudits" LocLabel="SR.SchemaHierarchy_ServerAudits" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="ServerLevelServerAudit" ChildQuerierTypes="SqlServerAudit" ValidFor="AllOnPrem"/>
  <Node Name="ServerLevelServerAuditSpecifications" LocLabel="SR.SchemaHierarchy_ServerAuditSpecifications" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="ServerLevelServerAuditSpecification" ChildQuerierTypes="SqlServerAuditSpecification" ValidFor="AllOnPrem"/>
  
  <Node Name="ServerLevelEndpoints" LocLabel="SR.SchemaHierarchy_Endpoints" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="ServerLevelEndpoint" ChildQuerierTypes="SqlEndpoint" ValidFor="AllOnPrem"/>
  <Node Name="ServerLevelLinkedServers" LocLabel="SR.SchemaHierarchy_LinkedServers" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="ServerLevelLinkedServer" ChildQuerierTypes="SqlLinkedServer"/>
  <Node Name="ServerLevelServerTriggers" LocLabel="SR.SchemaHierarchy_ServerTriggers" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="ServerLevelServerTrigger" ChildQuerierTypes="SqlServerDdlTrigger"/>
  <Node Name="ServerLevelErrorMessages" LocLabel="SR.SchemaHierarchy_ErrorMessages" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="ServerLevelErrorMessage" ChildQuerierTypes="SqlErrorMessage"/>
  
  <Node Name="Database" LocLabel="string.Empty" Image="Database" BaseClass="ModelBased" NodeType="Database" IsAsyncLoad="" Strategy="CreateModel" TreeNode="ExpandableSchemaTreeNode" PutFoldersAfterNodes="true">
    <ConditionalChildQuerierType Name="SqlSchema" SettingsFlag="GroupBySchema"/>
    <Filters>
      <!-- 
        Excluding built-in schemas for backward compatibility from the database node and moving them to legacy schema folder.
        The list of schemas was obtained from: 
        https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/ownership-and-user-schema-separation?view=sql-server-ver16#built-in-schemas-for-backward-compatibility
      -->
      <Filter Property="Name" Value="db_accessadmin" Type="string" IsNotFilter="true"/>
      <Filter Property="Name" Value="db_backupoperator" Type="string" IsNotFilter="true"/>
      <Filter Property="Name" Value="db_datareader" Type="string" IsNotFilter="true"/>
      <Filter Property="Name" Value="db_datawriter" Type="string" IsNotFilter="true"/>
      <Filter Property="Name" Value="db_ddladmin" Type="string" IsNotFilter="true"/>
      <Filter Property="Name" Value="db_denydatareader" Type="string" IsNotFilter="true"/>
      <Filter Property="Name" Value="db_denydatawriter" Type="string" IsNotFilter="true"/>
      <Filter Property="Name" Value="db_owner" Type="string" IsNotFilter="true"/>
      <Filter Property="Name" Value="db_securityadmin" Type="string" IsNotFilter="true"/>
    </Filters>
    <Child Name="Tables" SettingsFlag="!GroupBySchema"/>
    <Child Name="Views" SettingsFlag="!GroupBySchema"/>
    <Child Name="Synonyms" SettingsFlag="!GroupBySchema"/>
    <Child Name="BuiltInSchemas" SettingsFlag="GroupBySchema"/>
    <Child Name="Programmability"/>
    <Child Name="ExternalResources"/>
    <Child Name="ServiceBroker"/>
    <Child Name="Storage"/>
    <Child Name="Security"/>
  </Node>

  <Node Name="BuiltInSchemas" LocLabel="SR.SchemaHierarchy_BuiltInSchema" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlSchema" TreeNode="ExpandableSchemaTreeNode">
    <Filters>
      <Or>
        <Filter Property="Name" Value="db_accessadmin" Type="string" />
        <Filter Property="Name" Value="db_backupoperator" Type="string" />
        <Filter Property="Name" Value="db_datareader" Type="string"/>
        <Filter Property="Name" Value="db_datawriter" Type="string"/>
        <Filter Property="Name" Value="db_ddladmin" Type="string"/>
        <Filter Property="Name" Value="db_denydatareader" Type="string"/>
        <Filter Property="Name" Value="db_denydatawriter" Type="string"/>
        <Filter Property="Name" Value="db_owner" Type="string"/>
        <Filter Property="Name" Value="db_securityadmin" Type="string"/>
      </Or>
    </Filters>
  </Node>

  <Node Name="ExpandableSchema" LocLabel="string.empty"  BaseClass="ModelBased" Strategy="CreateModel">
    <Child Name="Tables"/>
    <Child Name="Views"/>
    <Child Name="Synonyms"/>
    <Child Name="ExpandableSchemaProgrammability"/>
  </Node>

  <Node Name="Tables" LocLabel="SR.SchemaHierarchy_Tables" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlTable" TreeNode="TableTreeNode">
    <Filters>
      <Filter Property="IsSystemObject" Value="0" Type="bool" />
      <Filter Property="TemporalType" Type="Enum" ValidFor="Sql2016OrHigher|AzureV12">
        <Value>TableTemporalType.None</Value>
        <Value>TableTemporalType.SystemVersioned</Value>
      </Filter>
      <Filter Property="LedgerType" Type="Enum" ValidFor="Sql2022OrHigher|AzureV12">
        <Value>LedgerTableType.None</Value>
        <Value>LedgerTableType.AppendOnlyLedgerTable</Value>
        <Value>LedgerTableType.UpdatableLedgerTable</Value>
      </Filter>
      <Filter Property="IsDroppedLedgerTable" Value="0" Type="bool" ValidFor="Sql2022OrHigher|AzureV12" />
    </Filters>
    <Properties>
      <Property Name="IsFileTable" ValidFor="Sql2012OrHigher"/>
      <Property Name="IsSystemVersioned" ValidFor="Sql2016OrHigher|AzureV12"/>
      <Property Name="TemporalType" ValidFor="Sql2016OrHigher|AzureV12"/>
      <Property Name="LedgerType" ValidFor="Sql2022OrHigher|AzureV12"/>
      <Property Name="IsExternal" ValidFor="Sql2016OrHigher|AzureV12|SqlOnDemand"/>
      <Property Name="IsEdge" ValidFor="Sql2017OrHigher|AzureV12"/>
      <Property Name="IsNode" ValidFor="Sql2017OrHigher|AzureV12"/>
    </Properties>
    <Child Name="SystemTables" IsSystemObject="1"/>
    <Child Name="ExternalTables"/>
    <Child Name="DroppedLedgerTables"/>
  </Node>

  <Node Name="Views" LocLabel="SR.SchemaHierarchy_Views" BaseClass="ModelBased"  Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlView" TreeNode="ViewTreeNode">
    <Filters>
      <Filter Property="IsSystemObject" Value="0" Type="bool" />
      <Filter Property="IsDroppedLedgerView" Value="0" Type="bool" ValidFor="Sql2022OrHigher|AzureV12"/>
    </Filters>
    <Properties>
      <Property Name="LedgerViewType" ValidFor="Sql2022|AzureV12"/>
    </Properties>
    <Child Name="SystemViews" IsSystemObject="1"/>
    <Child Name="DroppedLedgerViews"/>
  </Node>

  <Node Name="Synonyms" LocLabel="SR.SchemaHierarchy_Synonyms" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="Synonym" ChildQuerierTypes="SqlSynonym" ValidFor="AllOnPrem|AzureV12"/>
  <Node Name="Programmability" LocLabel="SR.SchemaHierarchy_Programmability" BaseClass="ModelBased" ValidFor="NotSqlDemand">
    <Child Name="StoredProcedures" SettingsFlag="!GroupBySchema"/>
    <Child Name="Functions" SettingsFlag="!GroupBySchema"/>
    <Child Name="DatabaseTriggers"/>
    <Child Name="Assemblies"/>
    <Child Name="Types" SettingsFlag="!GroupBySchema"/>
    <!--
    <Child Name="Rules"/>
    <Child Name="Defaults"/>
    -->
    <Child Name="Sequences" SettingsFlag="!GroupBySchema"/>
  </Node>
  <Node Name="ExpandableSchemaProgrammability" LocLabel="SR.SchemaHierarchy_Programmability" BaseClass="ModelBased" ValidFor="NotSqlDemand">
    <Child Name="StoredProcedures"/>
    <Child Name="Functions"/>
    <Child Name="Types"/>
    <Child Name="Sequences"/>
  </Node>
  <Node Name="ExternalResources" LocLabel="SR.SchemaHierarchy_ExternalResources" BaseClass="ModelBased" TreeNode="ExternalResourceTreeNode" ValidFor="Sql2016OrHigher|AzureV12|SqlOnDemand">
    <Child Name="ExternalDataSources"/>
    <Child Name="ExternalFileFormats"/>
  </Node>
  
  <Node Name="ServiceBroker" LocLabel="SR.SchemaHierarchy_ServiceBroker" BaseClass="ModelBased" ValidFor="AllOnPrem">
    <Child Name="MessageTypes"/>
    <Child Name="Contracts"/>
    <Child Name="Queues"/>
    <Child Name="Services"/>
    <!--Child Name="Routes"/-->
    <Child Name="DatabaseAndQueueEventNotifications"/>
    <Child Name="RemoteServiceBindings"/>
    <Child Name="BrokerPriorities"/>
  </Node>

  <Node Name="Storage" LocLabel="SR.SchemaHierarchy_Storage" BaseClass="ModelBased" ValidFor="AllOnPrem|AzureV12">
    <Child Name="FileGroups"/>
    <Child Name="FullTextCatalogs"/>
    <Child Name="FullTextStopLists"/>
    <Child Name="SqlLogFiles"/>
    <Child Name="PartitionFunctions"/>
    <Child Name="PartitionSchemes"/>
    <Child Name="SearchPropertyLists"/>
  </Node>
  <Node Name="Security" LocLabel="SR.SchemaHierarchy_Security" BaseClass="ModelBased" >
    <Child Name="Users"/>
    <Child Name="Roles"/>
    <Child Name="Schemas"/>
    <Child Name="AsymmetricKeys"/>
    <Child Name="Certificates"/>
    <Child Name="SymmetricKeys"/>
    <Child Name="DatabaseScopedCredentials"/>
    <Child Name="DatabaseEncryptionKeys"/>
    <Child Name="MasterKeys"/>
    <Child Name="Signatures"/>
    <Child Name="DatabaseAuditSpecifications"/>
    <Child Name="SecurityPolicies"/>
    <Child Name="AlwaysEncryptedKeys"/>
  </Node>

  <!-- Childs of Tables -->
  <Node Name="SystemTables" LocLabel="SR.SchemaHierarchy_SystemTables" BaseClass="ModelBased" IsMsShippedOwned="true" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlTable" TreeNode="TableTreeNode">
    <Filters >
      <Filter Property="IsSystemObject" Value="1" Type="bool" />
    </Filters>
  </Node>
  <Node Name="DroppedLedgerTables" LocLabel="SR.SchemaHierarchy_DroppedLedgerTables" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlTable" TreeNode="TableTreeNode" ValidFor="Sql2022OrHigher|AzureV12" SortPriority="Int32.MaxValue">
    <Filters >
      <Filter Property="IsDroppedLedgerTable" Value="1" Type="bool" />
    </Filters>
    <Properties>
      <Property Name="IsDroppedLedgerTable" ValidFor="Sql2022OrHigher|AzureV12"/>
    </Properties>
  </Node>
  <!--
  <Node Name="FileTables" LocLabel="SR.SchemaHierarchy_FileTables" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlTable" TreeNode="TableTreeNode" ValidFor="Sql2012OrHigher">
    <Filters >
      <Filter Property="IsFileTable" Value="1" Type="bool" />
    </Filters>
  </Node>
  <Node Name="ExternalTables" LocLabel="SR.SchemaHierarchy_ExternalTables" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlTable" TreeNode="ExternalTableTreeNode" ValidFor="Sql2016OrHigher|AzureV12">
    <Filters >
      <Filter Property="IsExternal" Value="1" Type="bool" />
    </Filters>
  </Node>
  -->
  <Node Name="Table" LocLabel="string.Empty" BaseClass="ModelBased" IsAsyncLoad="" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlTable;SqlHistoryTable" TreeNode="HistoryTableTreeNode">
    <Filters>
      <Or>
        <Filter TypeToReverse="SqlHistoryTable"  Property="TemporalType" Type="Enum" ValidFor="Sql2016OrHigher|AzureV12">
          <Value>TableTemporalType.HistoryTable</Value>
        </Filter>
        <Filter TypeToReverse="SqlHistoryTable"  Property="LedgerType" Type="Enum" ValidFor="Sql2022OrHigher|AzureV12">
          <Value>LedgerTableType.HistoryTable</Value>
        </Filter>
      </Or>
    </Filters>
    <Properties>
      <Property Name="LedgerType" ValidFor="Sql2022OrHigher|AzureV12"/>
      <Property Name="TemporalType" ValidFor="Sql2016OrHigher|AzureV12"/>
    </Properties>
    <Child Name="Columns"/>
    <Child Name="Keys"/>
    <Child Name="Constraints"/>
    <Child Name="Triggers"/>
    <Child Name="Indexes"/>
    <Child Name="Statistics"/>
  </Node>

  <!-- TODO This should use display item not ChildQuerierTypes -->
  
  <Node Name="HistoryTable" LocLabel="string.Empty" BaseClass="ModelBased" IsAsyncLoad="" Strategy="PopulateDetails" NodeType="Table" ValidFor="Sql2016OrHigher|AzureV12">
    <Child Name="Columns"/>
    <Child Name="Constraints"/>
    <Child Name="Indexes"/>
    <Child Name="Statistics"/>
  </Node>

  <Node Name="ExternalTable" LocLabel="string.Empty" BaseClass="ModelBased" IsAsyncLoad="" Strategy="PopulateDetails" NodeType="Table" ChildQuerierTypes="SqlTable" ValidFor="Sql2016OrHigher|AzureV12|SqlOnDemand">
    <Child Name="Columns"/>
    <Child Name="Statistics"/>
  </Node>

  <Node Name="Columns" LocLabel="SR.SchemaHierarchy_Columns" BaseClass="ModelBased" Strategy="PopulateParentDetails" NodeType="Column" ChildQuerierTypes="SqlColumn" DisableSort="">
    <Filters>
      <Filter Property="IsDroppedLedgerColumn" Value="0" Type="bool" ValidFor="Sql2022OrHigher|AzureV12" />
    </Filters>
    <Child Name="DroppedLedgerColumns"/>
  </Node>

  <Node Name="DroppedLedgerColumns" LocLabel="SR.SchemaHierarchy_DroppedLedgerColumns" BaseClass="ModelBased" Strategy="PopulateParentDetails" NodeType="Column" ChildQuerierTypes="SqlColumn" ValidFor="Sql2022OrHigher|AzureV12" SortPriority="Int32.MaxValue">
    <Filters>
      <Filter Property="IsDroppedLedgerColumn" Value="1" Type="bool" ValidFor="Sql2022OrHigher|AzureV12" />
    </Filters>
  </Node>

  <Node Name="Keys" LocLabel="SR.SchemaHierarchy_Keys" BaseClass="ModelBased" Strategy="ElementsInRelationship" NodeType="Key" ChildQuerierTypes="SqlIndex;SqlForeignKeyConstraint" ValidFor="NotSqlDw">
    <Filters>
      <Filter TypeToReverse="SqlIndex" Property="IndexKeyType" Type="Enum" ValidFor="AllOnPrem|AzureV12">
        <Value>IndexKeyType.DriPrimaryKey</Value>
        <Value>IndexKeyType.DriUniqueKey</Value>
      </Filter>
    </Filters>
	 
  </Node>
  <Node Name="Constraints" LocLabel="SR.SchemaHierarchy_Constraints" BaseClass="ModelBased" NodeType="Constraint" Strategy="ElementsInRelationship" ChildQuerierTypes="SqlDefaultConstraint;SqlCheck"/>
  <Node Name="Triggers" LocLabel="SR.SchemaHierarchy_Triggers" BaseClass="ModelBased" Strategy="ElementsInRelationship" NodeType="Trigger" ChildQuerierTypes="SqlDmlTrigger" ValidFor="AllOnPrem|AzureV12"/>
  <Node Name="Indexes" LocLabel="SR.SchemaHierarchy_Indexes" BaseClass="ModelBased" Strategy="ElementsInRelationship" NodeType="Index" ChildQuerierTypes="SqlIndex;SqlFullTextIndex" ValidFor="NotSqlDemand">
    <Filters>
      <Filter TypeToReverse="SqlIndex" Property="IndexKeyType" Type="Enum" ValidFor="AllOnPrem|AzureV12">
        <Value>IndexKeyType.None</Value>
        <Value>IndexKeyType.DriPrimaryKey</Value>
        <Value>IndexKeyType.DriUniqueKey</Value>
      </Filter>
    </Filters>
  </Node>
  <Node Name="Statistics" LocLabel="SR.SchemaHierarchy_Statistics" BaseClass="ModelBased" Strategy="ElementsInRelationship" NodeType="Statistic" ChildQuerierTypes="SqlStatistic" ValidFor="NotSqlDemand"/>

  <Node Name="SystemViews" LocLabel="SR.SchemaHierarchy_SystemViews" BaseClass="ModelBased" IsMsShippedOwned="true" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlView" TreeNode="ViewTreeNode">
    <Filters>
      <Filter Property="IsSystemObject" Value="1" Type="bool" />
    </Filters>
  </Node>

  <Node Name="DroppedLedgerViews" LocLabel="SR.SchemaHierarchy_DroppedLedgerViews" BaseClass="ModelBased" IsMsShippedOwned="true" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlView" TreeNode="ViewTreeNode" ValidFor="Sql2022OrHigher|AzureV12" SortPriority="Int32.MaxValue">
    <Filters>
      <Filter Property="IsDroppedLedgerView" Value="1" Type="bool" ValidFor="Sql2022OrHigher|AzureV12" />
    </Filters>
  </Node>

  <Node Name="View" LocLabel="string.Empty" BaseClass="ModelBased" IsAsyncLoad="" NodeType="View" Strategy="PopulateDetails">
    <Child Name="Columns"/>
    <Child Name="Triggers"/>
    <Child Name="Indexes"/>
    <Child Name="Statistics"/>
  </Node>

  <Node Name="Functions" LocLabel="SR.SchemaHierarchy_Functions" BaseClass="ModelBased" ValidFor="NotSqlDemand">
    <Child Name="SystemFunctions" IsSystemObject="1"/>
    <Child Name="TableValuedFunctions"/>
    <Child Name="ScalarValuedFunctions"/>
    <Child Name="AggregateFunctions"/>
  </Node>

  <Node Name="SystemFunctions" LocLabel="SR.SchemaHierarchy_SystemFunctions" BaseClass="ModelBased" IsMsShippedOwned="true" Strategy="MultipleElementsOfType" TreeNode="TableValuedFunctionTreeNode">
    <Child Name="SystemTableValuedFunctions" IsSystemObject="1"/>
    <Child Name="SystemScalarValuedFunctions" IsSystemObject="1"/>
  </Node>

  <Node Name="DatabaseTriggers" LocLabel="SR.SchemaHierarchy_DatabaseTriggers" BaseClass="ModelBased" NodeType="DatabaseTrigger" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlDatabaseDdlTrigger" ValidFor="AllOnPrem|AzureV12"/>
  <Node Name="Assemblies" LocLabel="SR.SchemaHierarchy_Assemblies" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="Assembly" ChildQuerierTypes="SqlAssembly" ValidFor="AllOnPrem|AzureV12"/>
  <Node Name="Types" LocLabel="SR.SchemaHierarchy_Types" BaseClass="ModelBased" ValidFor="NotSqlDemand">
    <Child Name="SystemDataTypes" IsSystemObject="1"/>
    <Child Name="UserDefinedDataTypes"/>
    <Child Name="UserDefinedTableTypes"/>
    <Child Name="UserDefinedTypes"/>
    <Child Name="XmlSchemaCollections"/>
  </Node>
  <!--==
  <Node Name="Rules" LocLabel="SR.SchemaHierarchy_Rules" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="Rule" ChildQuerierTypes="SqlRule" ValidFor="AllOnPrem|AzureV12"/>
  <Node Name="Defaults" LocLabel="SR.SchemaHierarchy_Defaults" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="Default" ChildQuerierTypes="SqlDefault" ValidFor="AllOnPrem|AzureV12"/>
  -->
  <Node Name="Sequences" LocLabel="SR.SchemaHierarchy_Sequences" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="Sequence" ChildQuerierTypes="SqlSequence" ValidFor="Sql2012OrHigher|AzureV12"/>

  <Node Name="SystemDataTypes" LocLabel="SR.SchemaHierarchy_SystemDataTypes" BaseClass="ModelBased" >
    <Child Name="SystemExactNumerics"/>
    <Child Name="SystemApproximateNumerics"/>
    <Child Name="SystemDateAndTimes"/>
    <Child Name="SystemCharacterStrings"/>
    <Child Name="SystemUnicodeCharacterStrings"/>
    <Child Name="SystemBinaryStrings"/>
    <Child Name="SystemOtherDataTypes"/>
    <Child Name="SystemClrDataTypes"/>
    <Child Name="SystemSpatialDataTypes"/>
  </Node>
  <Node Name="UserDefinedDataTypes" LocLabel="SR.SchemaHierarchy_UserDefinedDataTypes" BaseClass="ModelBased" NodeType="UserDefinedDataType" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlUserDefinedDataType" ValidFor="AllOnPrem|AzureV12"/>
  <Node Name="UserDefinedTableTypes" LocLabel="SR.SchemaHierarchy_UserDefinedTableTypes" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlUserDefinedTableType" TreeNode="UserDefinedTableTypeTreeNode" ValidFor="Sql2008OrHigher|AzureV12"/>
  <Node Name="UserDefinedTypes" LocLabel="SR.SchemaHierarchy_UserDefinedTypes" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="UserDefinedType" ChildQuerierTypes="SqlUserDefinedType" ValidFor="AllOnPrem|AzureV12"/>
  <Node Name="XmlSchemaCollections" LocLabel="SR.SchemaHierarchy_XMLSchemaCollections" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="XmlSchemaCollection" ChildQuerierTypes="SqlXmlSchemaCollection" ValidFor="AllOnPrem|AzureV12"/>

  <Node Name="UserDefinedTableType" LocLabel="string.Empty" BaseClass="ModelBased" ChildQuerierTypes="" NodeType="UserDefinedTableType" IsAsyncLoad="" Strategy="PopulateDetails">
    <Child Name="UserDefinedTableTypeColumns"/>
    <Child Name="UserDefinedTableTypeKeys"/>
    <Child Name="UserDefinedTableTypeConstraints"/>
  </Node>
  <Node Name="UserDefinedTableTypeColumns" LocLabel="SR.SchemaHierarchy_Columns" BaseClass="ModelBased" NodeType="UserDefinedTableTypeColumn" Strategy="PopulateParentDetails" ChildQuerierTypes="SqlColumn" DisableSort=""/>
  <Node Name="UserDefinedTableTypeKeys" LocLabel="SR.SchemaHierarchy_Keys" BaseClass="ModelBased" NodeType="UserDefinedTableTypeKey" Strategy="PopulateParentDetails" ChildQuerierTypes="SqlIndex">
    <Filters>
      <Filter TypeToReverse="SqlIndex" Property="IndexKeyType" Type="Enum" ValidFor="Sql2016OrHigher|AzureV12">
        <Value>IndexKeyType.DriPrimaryKey</Value>
        <Value>IndexKeyType.DriUniqueKey</Value>
      </Filter>
    </Filters>
  </Node>
  <Node Name="UserDefinedTableTypeConstraints" LocLabel="SR.SchemaHierarchy_Constraints" BaseClass="ModelBased" NodeType="UserDefinedTableTypeConstraint" Strategy="PopulateParentDetails" ChildQuerierTypes="SqlDefaultConstraint;SqlCheck"/>/>

  <Node Name="SystemExactNumerics" LocLabel="SR.SchemaHierarchy_SystemExactNumerics" BaseClass="ModelBased" NodeType="SystemExactNumeric" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlBuiltInType"/>
  <Node Name="SystemApproximateNumerics" LocLabel="SR.SchemaHierarchy_SystemApproximateNumerics" BaseClass="ModelBased" NodeType="SystemApproximateNumeric" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlBuiltInType"/>
  <Node Name="SystemDateAndTimes" LocLabel="SR.SchemaHierarchy_SystemDateAndTime" BaseClass="ModelBased" NodeType="SystemDateAndTime" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlBuiltInType"/>
  <Node Name="SystemCharacterStrings" LocLabel="SR.SchemaHierarchy_SystemCharacterStrings" BaseClass="ModelBased" NodeType="SystemCharacterString" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlBuiltInType"/>
  <Node Name="SystemUnicodeCharacterStrings" LocLabel="SR.SchemaHierarchy_SystemUnicodeCharacterStrings" BaseClass="ModelBased" NodeType="SystemUnicodeCharacterString" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlBuiltInType"/>
  <Node Name="SystemBinaryStrings" LocLabel="SR.SchemaHierarchy_SystemBinaryStrings" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="SystemBinaryString" ChildQuerierTypes="SqlBuiltInType"/>
  <Node Name="SystemOtherDataTypes" LocLabel="SR.SchemaHierarchy_SystemOtherDataTypes" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="SystemOtherDataType" ChildQuerierTypes="SqlBuiltInType"/>
  <Node Name="SystemClrDataTypes" LocLabel="SR.SchemaHierarchy_SystemCLRDataTypes" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="SystemClrDataType" ChildQuerierTypes="SqlBuiltInType" ValidFor="All"/>
  <Node Name="SystemSpatialDataTypes" LocLabel="SR.SchemaHierarchy_SystemSpatialDataTypes" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="SystemSpatialDataType" ChildQuerierTypes="SqlBuiltInType" ValidFor="Sql2008OrHigher|AzureV12"/>

  <!-- Childs of ExternalResources -->
  <Node Name="ExternalDataSources" LocLabel="SR.SchemaHierarchy_ExternalDataSources" BaseClass="ModelBased" NodeType="ExternalDataSource" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlExternalDataSource" ValidFor="Sql2016OrHigher|AzureV12|SqlOnDemand"/>
  <Node Name="ExternalFileFormats" LocLabel="SR.SchemaHierarchy_ExternalFileFormats" BaseClass="ModelBased" NodeType="ExternalFileFormat" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlExternalFileFormat" ValidFor="Sql2016OrHigher|SqlOnDemand"/>
  
  <Node Name="StoredProcedures" LocLabel="SR.SchemaHierarchy_StoredProcedures" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlProcedure" TreeNode="StoredProcedureTreeNode">
    <Filters >
      <Filter Property="IsSystemObject" Value="0" Type="bool" />
    </Filters>
    <Child Name="SystemStoredProcedures" IsSystemObject="1"/>
  </Node>
  <Node Name="SystemStoredProcedures" LocLabel="SR.SchemaHierarchy_SystemStoredProcedures" BaseClass="ModelBased" IsMsShippedOwned="true" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlProcedure" TreeNode="StoredProcedureTreeNode">
    <Filters >
      <Filter Property="IsSystemObject" Value="1" Type="bool" />
    </Filters>
  </Node>
  <Node Name="StoredProcedure" LocLabel="string.Empty" BaseClass="ModelBased" ChildQuerierTypes="" NodeType="StoredProcedure" IsAsyncLoad="" Strategy="PopulateDetails">
    <Child Name="StoredProcedureParameters"/>
  </Node>
  <Node Name="StoredProcedureParameters" LocLabel="SR.SchemaHierarchy_Parameters"  BaseClass="ModelBased" NodeType="StoredProcedureParameter" Strategy="StoredProcedureParameters" ChildQuerierTypes="SqlSubroutineParameter" DisableSort=""/>

  <Node Name="TableValuedFunctions" LocLabel="SR.SchemaHierarchy_TableValuedFunctions" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlUserDefinedFunction" TreeNode="TableValuedFunctionTreeNode" ValidFor="NotSqlDw">
    <Filters >
      <Filter Property="FunctionType" Type="Enum">
        <Value>UserDefinedFunctionType.Table</Value>
        <Value>UserDefinedFunctionType.Inline</Value>
      </Filter>
      <Filter Property="IsSystemObject" Value="0" Type="bool" />
    </Filters>
  </Node>
  <Node Name="SystemTableValuedFunctions" LocLabel="SR.SchemaHierarchy_TableValuedFunctions" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlUserDefinedFunction" TreeNode="TableValuedFunctionTreeNode" ValidFor="NotSqlDw">
    <Filters >
      <Filter Property="FunctionType" Type="Enum">
        <Value>UserDefinedFunctionType.Table</Value>
        <Value>UserDefinedFunctionType.Inline</Value>
      </Filter>
      <Filter Property="IsSystemObject" Value="1" Type="bool" />
    </Filters>
  </Node>
  <Node Name="TableValuedFunction" LocLabel="string.Empty" BaseClass="ModelBased" ChildQuerierTypes="" NodeType="TableValuedFunction" IsAsyncLoad="" Strategy="PopulateDetails">
    <Child Name="TableValuedFunctionParameters"/>
  </Node>
  <Node Name="TableValuedFunctionParameters" LocLabel="SR.SchemaHierarchy_Parameters"  BaseClass="ModelBased" NodeType="TableValuedFunctionParameter" Strategy="FunctionParameters" ChildQuerierTypes="SqlSubroutineParameter" DisableSort="">
  </Node>

  <Node Name="ScalarValuedFunctions" LocLabel="SR.SchemaHierarchy_ScalarValuedFunctions" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlUserDefinedFunction" TreeNode="ScalarValuedFunctionTreeNode" >
    <Filters>
      <Filter Property="FunctionType" Type="Enum" ValidFor="NotSqlDw">
        <Value>UserDefinedFunctionType.Scalar</Value>
      </Filter>
      <Filter  Property="IsSystemObject" Value="0" Type="bool" />
    </Filters>
  </Node>
  <Node Name="SystemScalarValuedFunctions" LocLabel="SR.SchemaHierarchy_ScalarValuedFunctions" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlUserDefinedFunction" TreeNode="ScalarValuedFunctionTreeNode" >
    <Filters>
      <Filter Property="FunctionType" Type="Enum" ValidFor="NotSqlDw">
        <Value>UserDefinedFunctionType.Scalar</Value>
      </Filter>
      <Filter  Property="IsSystemObject" Value="1" Type="bool" />
    </Filters>
  </Node>
  <Node Name="ScalarValuedFunction" LocLabel="string.Empty" BaseClass="ModelBased" NodeType="ScalarValuedFunction" ChildQuerierTypes="" IsAsyncLoad="" Strategy="PopulateDetails">
    <Child Name="ScalarValuedFunctionParameters"/>
  </Node>
  <Node Name="ScalarValuedFunctionParameters" LocLabel="SR.SchemaHierarchy_Parameters" NodeType="ScalarValuedFunctionParameter"  BaseClass="ModelBased" Strategy="FunctionParameters" ChildQuerierTypes="SqlSubroutineParameter" DisableSort=""/>

  <Node Name="AggregateFunctions" LocLabel="SR.SchemaHierarchy_AggregateFunctions" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlUserDefinedAggregate" TreeNode="AggregateFunctionTreeNode" ValidFor="AllOnPrem|AzureV12">
  </Node>
  <Node Name="AggregateFunction" LocLabel="string.Empty" BaseClass="ModelBased" ChildQuerierTypes="" NodeType="AggregateFunction" IsAsyncLoad="" Strategy="PopulateDetails">
    <Child Name="AggregateFunctionParameters"/>
  </Node>
  <Node Name="AggregateFunctionParameters" LocLabel="SR.SchemaHierarchy_Parameters"  BaseClass="ModelBased" NodeType="AggregateFunctionParameter" Strategy="PopulateParentDetails" ChildQuerierTypes="SqlSubroutineParameter" DisableSort=""/>

  <!-- TODO Support Route in SMO
  <Node Name="Routes" LocLabel="SR.SchemaHierarchy_Routes" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlRoute"/>
  -->
  <!-- TODO support events
  <Node Name="DatabaseAndQueueEventNotifications" LocLabel="SR.SchemaHierarchy_EventNotifications" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlEventNotification"/>
  -->
  
  <Node Name="RemoteServiceBindings" LocLabel="SR.SchemaHierarchy_RemoteServiceBindings" BaseClass="ModelBased" NodeType="RemoteServiceBinding" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlRemoteServiceBinding"/>
  <Node Name="BrokerPriorities" LocLabel="SR.SchemaHierarchy_BrokerPriorities" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="BrokerPriority" ChildQuerierTypes="SqlBrokerPriority" ValidFor="Sql2008OrHigher"/>

  <Node Name="FileGroups" LocLabel="SR.SchemaHierarchy_FileGroups" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlFileGroup" TreeNode="FileGroupTreeNode"/>
  <Node Name="FullTextCatalogs" LocLabel="SR.SchemaHierarchy_FullTextCatalogs" BaseClass="ModelBased" NodeType="FullTextCatalog" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlFullTextCatalog"/>
  <Node Name="FullTextStopLists" LocLabel="SR.SchemaHierarchy_FullTextStopLists" BaseClass="ModelBased" NodeType="FullTextStopList" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlFullTextStopList" ValidFor="Sql2008OrHigher|AzureV12"/>
  <Node Name="SqlLogFiles" LocLabel="SR.SchemaHierarchy_LogFiles" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="SqlLogFile" ChildQuerierTypes="SqlFile"/>
  <Node Name="PartitionFunctions" LocLabel="SR.SchemaHierarchy_PartitionFunctions" BaseClass="ModelBased" NodeType="PartitionFunction" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlPartitionFunction"/>
  <Node Name="PartitionSchemes" LocLabel="SR.SchemaHierarchy_PartitionSchemes" BaseClass="ModelBased" NodeType="PartitionScheme" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlPartitionScheme"/>
  <Node Name="SearchPropertyLists" LocLabel="SR.SchemaHierarchy_SearchPropertyLists" BaseClass="ModelBased" NodeType="SearchPropertyList" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlSearchPropertyList" ValidFor="Sql2012OrHigher|AzureV12"/>

  <Node Name="FileGroup" LocLabel="string.Empty" BaseClass="ModelBased" ChildQuerierTypes="">
    <Child Name="FileGroupFiles"/>
  </Node>

  <Node Name="FileGroupFiles" LocLabel="SR.SchemaHierarchy_FilegroupFiles" BaseClass="ModelBased" NodeType="FileGroupFile" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlFile" >
  </Node>

  <Node Name="Users" LocLabel="SR.SchemaHierarchy_Users" BaseClass="ModelBased" NodeType="User" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlUser"/>
  <Node Name="Roles" LocLabel="SR.SchemaHierarchy_Roles" NodeType="Role" BaseClass="ModelBased" >
    <Child Name="DatabaseRoles"/>
    <Child Name="ApplicationRoles"/>
  </Node>
  <Node Name="Schemas" LocLabel="SR.SchemaHierarchy_Schemas" BaseClass="ModelBased" NodeType="Schema" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlSchema"/>
  <Node Name="AsymmetricKeys" LocLabel="SR.SchemaHierarchy_AsymmetricKeys" BaseClass="ModelBased" NodeType="AsymmetricKey" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlAsymmetricKey" ValidFor="AllOnPrem"/>
  <Node Name="Certificates" LocLabel="SR.SchemaHierarchy_Certificates" BaseClass="ModelBased" NodeType="Certificate" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlCertificate" ValidFor="AllOnPrem"/>
  <Node Name="SymmetricKeys" LocLabel="SR.SchemaHierarchy_SymmetricKeys" BaseClass="ModelBased" NodeType="SymmetricKey" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlSymmetricKey" ValidFor="AllOnPrem"/>
  <Node Name="DatabaseEncryptionKeys" LocLabel="SR.SchemaHierarchy_DatabaseEncryptionKeys" BaseClass="ModelBased" NodeType="DatabaseEncryptionKey" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlDatabaseEncryptionKey" ValidFor="Sql2008OrHigher"/>
  <Node Name="MasterKeys" LocLabel="SR.SchemaHierarchy_MasterKeys" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="MasterKey" ChildQuerierTypes="SqlMasterKey" ValidFor="AllOnPrem"/>
  
  <!-- TODO Support signatures
  <Node Name="Signatures" LocLabel="SR.SchemaHierarchy_Signatures" BaseClass="ModelBased" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlSignature" ValidFor="AllOnPrem"/>
  -->
  <Node Name="DatabaseAuditSpecifications" LocLabel="SR.SchemaHierarchy_DatabaseAuditSpecifications" BaseClass="ModelBased" NodeType="DatabaseAuditSpecification" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlDatabaseAuditSpecification" ValidFor="Sql2008OrHigher"/>
  <Node Name="SecurityPolicies" LocLabel="SR.SchemaHierarchy_SecurityPolicies" BaseClass="ModelBased" Strategy="MultipleElementsOfType" NodeType="SecurityPolicy" ChildQuerierTypes="SqlSecurityPolicy" ValidFor="Sql2016OrHigher|AzureV12"/>
  <Node Name="DatabaseScopedCredentials" LocLabel="SR.SchemaHierarchy_DatabaseScopedCredentials" BaseClass="ModelBased" NodeType="DatabaseScopedCredential" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlDatabaseCredential" ValidFor="Sql2016OrHigher|AzureV12"/>
  <Node Name="AlwaysEncryptedKeys" LocLabel="SR.SchemaHierarchy_AlwaysEncryptedKeys" BaseClass="ModelBased" ValidFor="Sql2016OrHigher|AzureV12">
    <Child Name="ColumnMasterKeys"/>
    <Child Name="ColumnEncryptionKeys"/>
  </Node>

  <Node Name="DatabaseRoles" LocLabel="SR.SchemaHierarchy_DatabaseRoles" BaseClass="ModelBased" NodeType="DatabaseRole" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlRole"/>
  <Node Name="ApplicationRoles" LocLabel="SR.SchemaHierarchy_ApplicationRoles" BaseClass="ModelBased" NodeType="ApplicationRole" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlApplicationRole" ValidFor="AllOnPrem|AzureV12"/>
  <Node Name="ColumnMasterKeys" LocLabel="SR.SchemaHierarchy_ColumnMasterKeys" BaseClass="ModelBased" NodeType="ColumnMasterKey" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlColumnMasterKey" ValidFor="Sql2016OrHigher|AzureV12"/>
  <Node Name="ColumnEncryptionKeys" LocLabel="SR.SchemaHierarchy_ColumnEncryptionKeys" BaseClass="ModelBased" NodeType="ColumnEncryptionKey" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlColumnEncryptionKey" ValidFor="Sql2016OrHigher|AzureV12"/>

  <Node Name="MessageTypes" LocLabel="SR.SchemaHierarchy_MessageTypes" BaseClass="ModelBased" NodeType="MessageType" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlMessageType">
    <Child Name="SystemMessageTypes" IsSystemObject="1"/>
  </Node>
  <Node Name="SystemMessageTypes" LocLabel="SR.SchemaHierarchy_SystemMessageTypes" BaseClass="ModelBased" NodeType="SystemMessageType" IsMsShippedOwned="true" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlMessageType"/>

  <Node Name="Contracts" LocLabel="SR.SchemaHierarchy_Contracts" BaseClass="ModelBased" NodeType="Contract" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlContract">
    <Child Name="SystemContracts" IsSystemObject="1"/>
  </Node>
  <Node Name="SystemContracts" LocLabel="SR.SchemaHierarchy_SystemContracts" BaseClass="ModelBased" NodeType="SystemContract" IsMsShippedOwned="true" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlContract"/>

  <Node Name="Queues" LocLabel="SR.SchemaHierarchy_Queues" BaseClass="ModelBased" NodeType="Queue" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlQueue">
    <Child Name="SystemQueues" IsSystemObject="1"/>
  </Node>
  <Node Name="SystemQueues" LocLabel="SR.SchemaHierarchy_SystemQueues" BaseClass="ModelBased" NodeType="SystemQueue" IsMsShippedOwned="true" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlQueue"/>

  <Node Name="Services" LocLabel="SR.SchemaHierarchy_Services" BaseClass="ModelBased" NodeType="Service" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlService">
    <Child Name="SystemServices" IsSystemObject="1"/>
  </Node>
  <Node Name="SystemServices" LocLabel="SR.SchemaHierarchy_SystemServices" BaseClass="ModelBased" NodeType="SystemService" IsMsShippedOwned="true" Strategy="MultipleElementsOfType" ChildQuerierTypes="SqlService"/>

  <CodeGenOptions>
    <UniqueTreeNode Name="DatabaseTreeNode"/>
    <UniqueTreeNode Name="TableTreeNode"/>
    <UniqueTreeNode Name="ViewTreeNode"/>
    <UniqueTreeNode Name="UserDefinedTableTypeTreeNode"/>
    <UniqueTreeNode Name="StoredProcedureTreeNode"/>
    <UniqueTreeNode Name="TableValuedFunctionTreeNode"/>
    <UniqueTreeNode Name="ScalarValuedFunctionTreeNode"/>
    <UniqueTreeNode Name="AggregateFunctionTreeNode"/>
    <UniqueTreeNode Name="FileGroupTreeNode"/>
    <UniqueTreeNode Name="ExternalTableTreeNode"/>
    <UniqueTreeNode Name="ExternalResourceTreeNode"/>
    <UniqueTreeNode Name="HistoryTableTreeNode" />
    <UniqueTreeNode Name="ExpandableSchemaTreeNode" Type="Schema"/>
  </CodeGenOptions>

  <!-- WARNING: Specifying reverse dependencies that could load large numbers of objects will be detrimental to performance. -->
  <ReverseDependencyList>
    <ReverseDependency Type="SqlUser" DependsOn="SqlRole;SqlRoleMembership"/>
  </ReverseDependencyList>
</ServerExplorerTree>
