Topologies in a geodatabase in SQL Server

Topologies are rules that enforce data integrity and manage the behavior of spatially related feature classes. A geodatabase topology stores information about the feature classes (which must be in the same feature dataset) that participate in the topology, the cluster tolerance assigned to the topology, the relative rank of each feature class in the topology, and a list of the rules that apply to that topology.

For more information on the concepts related to topologies, see Topology basics and Topology in ArcGIS.

Topologies in ArcGIS Desktop

Topologies in the Catalog tree appear under the feature dataset in which the participating feature classes reside. The topology is represented with the following icon:

Topology icon

You can see which feature classes in a feature dataset participate in the topology by looking at the Feature Classes tab of the Topology Properties dialog box.

The Topology Properties dialog box

Clicking the Rules tab displays the rules that apply to the topology. After the topology has been validated, you can generate a list of the errors and exceptions for each rule from the Errors tab.

Topologies in a Microsoft SQL Server database

In the DBMS, topologies are stored in the GDB_ITEMS table. The rules associated with the topology are stored in the Definition column.

When you validate a topology, the dirty areas and topology errors found associated with each topology are stored in a set of tables in the schema of the user connected to the geodatabase. These are the T_<ID>_DIRTYAREAS, T_<ID>_LINEERRORS, T_<ID>_POINTERRORS , and T_<ID>_POLYERRORS tables. The ID in the table names correspond to the topology ID in the DatasetSubtype1 field of the GDB_ITEMS table. Each error table stores the violated rule in the TopoRuleID field. This field is linked to the col_iteminfo field of the GDB_ITEMS table.

The following is a definition of the dirty areas and topology errors tables and an example of the topology tables as they appear in SQL Server.

T_<ID>_DIRTYAREAS

This table is created when you validate a topology.

Field name

Field type

Description

Null?

objectid

integer

Unique identifier of the dirty area feature in the topology

NOT NULL

isretired

integer

This code indicates whether the dirty area has reached the maximum number of vertices (250).

When this limit is reached, a new dirty area feature is created and the existing one retired (value changes to 1).

0 = Max vertices limit is not yet reached or 1 = Max vertices limit

NOT NULL

dirtyarea

integer

geometry

geography

Shape field

T_<ID>_LINEERRORS, T_<ID>_POINTERRORS, and T_<ID>_POLYERRORS

Any violations of the topology rules are represented as error features. As with dirty areas, these error features are also stored and managed in separate topology error tables. These tables all share an almost identical schema definition, with the exception of the additional fields specific to the shape type of the topology error. As indicated by the table names, they store information about topology errors based on the type of feature for which the error occurred—line, point, or polygon.

These tables do not exist in your database until you have validated a topology.

Field name

Field type

Description

Null?

ObjectID

int

Unique ID of the topology error feature in the specified topology error table

Topology errors do not have unique IDs in the topology, only in their specific table.

NOT NULL

OriginClassID

int

Object class ID of the origin feature class

NOT NULL

OriginID

int

Feature ID of the feature from the origin feature class that is related to the topology error

DestClassID

int

Object class ID of the destination feature class

DestID

int

Feature ID of the feature from the destination feature class that is related to the topology error

TopoRuleType

int

The type of topology rule; corresponds to a value from the esriTopologyRuleType constant

TopoRuleID

int

The ID of the topology rule stored in the ItemInfo column of the GDB_ITEMS table

NOT NULL

IsException

int

A code that indicates whether the topology error has been marked as an exception

  • 0 = Not an exception (the default)
  • 1 = Marked as an exception

NOT NULL

Shape

int

Indicates shape type

The dirty areas and topology errors tables are created in the schema of the user who creates the topology. The other tables are created in the ArcSDE administrative user's schema.

Topology tables in SQL Server

Dashed lines indicate implicit relationships between columns.

Topologies in an XML document

Topologies are types of datasets, so they appear in an XML document under a DataElement tag of type FeatureDataset. The topology rules are included and grouped with a TopologyRule tag. For a topology, u_topo, in a feature dataset,Water, the entry in the XML document looks like the following:

<DatasetDefinitions xsi:type="esri:ArrayOfDataElement">
<DataElement xsi:type="esri:DEFeatureDataset">
    <CatalogPath>/V=sde.DEFAULT/FD=sde.RJP.Landbase</CatalogPath> 
    <Name>sde.RJP.Landbase</Name> 
  <Children xsi:type="esri:ArrayOfDataElement">
    <DataElement xsi:type="esri:DETopology">
          <CatalogPath>/V=sde.DEFAULT/FD=sde.RJP.Landbase/TOPO=sde.RJP.Landbase_Topology</CatalogPath> 
        <Name>sde.RJP.Landbase_Topology</Name> 
        <DatasetType>esriDTTopology</DatasetType> 
        <DSID>-1</DSID> 
        <Versioned>true</Versioned> 
        <CanVersion>true</CanVersion> 
      <Extent xsi:type="esri:EnvelopeN">
           <XMin>503924.656249088</XMin> 
           <YMin>680110.56250334</YMin> 
           <XMax>512514.562497088</XMax> 
           <YMax>689084.187511697</YMax> 
        <SpatialReference xsi:type="esri:ProjectedCoordinateSystem">
  <WKT>PROJCS["NAD_1927_StatePlane_Alabama_East_FIPS_0101", GEOGCS["GCS_North_American_1927", DATUM["D_North_American_1927",SPHEROID["Clarke_1866",6378206.4,294.9786982]], PRIMEM["Greenwich",0.0], UNIT["Degree",0.0174532925199433]], PROJECTION["Transverse_Mercator"], PARAMETER["False_Easting",500000.0], PARAMETER["False_Northing",0.0], PARAMETER["Central_Meridian",-85.83333333333333], PARAMETER["Scale_Factor",0.99996], PARAMETER["Latitude_Of_Origin",30.5], UNIT["Foot_US",0.3048006096012192]]</WKT> 
             <XOrigin>489871.255812</XOrigin> 
             <YOrigin>665787.099562</YOrigin> 
             <XYScale>499999.999534338</XYScale> 
             <ZOrigin>0</ZOrigin> 
             <ZScale>1</ZScale> 
             <MOrigin>0</MOrigin> 
             <MScale>1</MScale> 
             <XYTolerance>6.56166666666667E-04</XYTolerance> 
             <ZTolerance>2</ZTolerance> 
             <MTolerance>2</MTolerance> 
             <HighPrecision>true</HighPrecision> 
          </SpatialReference>
       </Extent>
     <SpatialReference xsi:type="esri:ProjectedCoordinateSystem">
  <WKT>PROJCS["NAD_1927_StatePlane_Alabama_East_FIPS_0101", GEOGCS["GCS_North_American_1927", DATUM["D_North_American_1927", SPHEROID["Clarke_1866",6378206.4,294.9786982]], PRIMEM["Greenwich",0.0], UNIT["Degree",0.0174532925199433]], PROJECTION["Transverse_Mercator"], PARAMETER["False_Easting",500000.0], PARAMETER["False_Northing",0.0], PARAMETER["Central_Meridian",-85.83333333333333], PARAMETER["Scale_Factor",0.99996], PARAMETER["Latitude_Of_Origin",30.5], UNIT["Foot_US",0.3048006096012192]]</WKT> 
             <XOrigin>489871.255812</XOrigin> 
             <YOrigin>665787.099562</YOrigin> 
             <XYScale>499999.999534338</XYScale> 
             <ZOrigin>0</ZOrigin> 
             <ZScale>8192</ZScale> 
             <MOrigin>0</MOrigin> 
             <MScale>8192</MScale> 
             <XYTolerance>6.56166666666667E-04</XYTolerance> 
             <ZTolerance>2</ZTolerance> 
             <MTolerance>2</MTolerance> 
             <HighPrecision>true</HighPrecision> 
      </SpatialReference>
      <ClusterTolerance>0.5</ClusterTolerance> 
      <ZClusterTolerance>-1</ZClusterTolerance> 
      <MaxGeneratedErrorCount>-1</MaxGeneratedErrorCount> 
    <FeatureClassNames xsi:type="esri:Names">
         <Name>sde.RJP.Blocks</Name> 
         <Name>sde.RJP.Parcels</Name> 
      </FeatureClassNames>
    <TopologyRules xsi:type="esri:ArrayOfTopologyRule">
      <TopologyRule xsi:type="esri:TopologyRule">
           <HelpString /> 
           <RuleID>183</RuleID> 
           <Name /> 
           <GUID>7D3E7075-16CF-47AD-A8F4-842B921B1E1E</GUID> 
           <TopologyRuleType>esriTRTAreaNoOverlap</TopologyRuleType> 
           <OriginClassID>100</OriginClassID> 
           <OriginSubtype>0</OriginSubtype> 
           <DestinationClassID>100</DestinationClassID> 
           <DestinationSubtype>0</DestinationSubtype> 
           <TriggerErrorEvents>false</TriggerErrorEvents> 
           <AllOriginSubtypes>true</AllOriginSubtypes> 
           <AllDestinationSubtypes>true</AllDestinationSubtypes> 
        </TopologyRule>
      <TopologyRule xsi:type="esri:TopologyRule">
           <HelpString /> 
           <RuleID>184</RuleID> 
           <Name /> 
           <GUID>6F58891D-5BD9-4848-802E-90458152B0CE</GUID> 
           <TopologyRuleType>esriTRTAreaCoveredByArea</TopologyRuleType> 
           <OriginClassID>100</OriginClassID> 
           <OriginSubtype>1</OriginSubtype> 
           <DestinationClassID>98</DestinationClassID> 
           <DestinationSubtype>1</DestinationSubtype> 
           <TriggerErrorEvents>false</TriggerErrorEvents> 
           <AllOriginSubtypes>false</AllOriginSubtypes> 
           <AllDestinationSubtypes>false</AllDestinationSubtypes> 
        </TopologyRule>
    </TopologyRules>
</DataElement>

Related Topics


11/18/2013