Beispiel: Abrufen einer Liste mit Beziehungsklassen

In der Spalte "Definition" der Tabelle "GDB_Items" sind alle Felddefinitionen gespeichert. Um zu ermitteln, bei welchen Feldern es sich um Beziehungsklassen handelt, müssen Sie die Suche auf den entsprechenden Typ beschränken. Die Informationen, die ein Feld als Beziehungsklasse kennzeichnen, sind in der Spalte "Name" der Tabelle "GDB_ItemTypes" gespeichert. Verbinden Sie die Tabellen über die Spalte "Type" der Tabelle "GDB_Items" (oder GDB_Items_vw view in Oracle) und die Spalte "UUID" der Tabelle "GDB_ItemTypes", und führen Sie dann eine Abfrage nach dem Beziehungsklassentyp aus der Tabelle "GDB_ItemTypes" durch.

In den folgenden Beispielen in den folgenden Schritten wird eine Abfrage nach dem Namen der Beziehungsklasse durchgeführt und ggf. nach dem Feature-Dataset, in dem sie enthalten ist, sowie nach den Namen beider Tabellen bzw. Feature-Classes, die Teil der Beziehungsklasse sind. Bei der Abfrage der Geodatabase werden auch Feature-bezogene Annotations zurückgegeben. Bei Feature-bezogenen Annotations handelt es sich um einen speziellen Typ von Beziehungsklasse.

--Queries a geodatabase in PostgreSQL
--Returns a list of relationship classes and their member tables

SELECT
 (xpath('//CatalogPath/text()', definition))::text AS "Relationship class and dataset",
 (xpath('//OriginClassNames/text()', definition))::text AS "Origin class",
 (xpath('//DestinationClassNames/text()', definition))::text AS "Destination class"
FROM 
 sde.gdb_items items INNER JOIN sde.gdb_itemtypes itemtypes
 ON items.type = itemtypes.uuid
WHERE 
 itemtypes.name = 'Relationship class';
--Queries a dbo-schema geodatabase in SQL Server
--Returns a list of relationship classes and their member tables

SELECT
	ITEMS.Definition.value('(/DERelationshipClassInfo/CatalogPath)[1]', 'nvarchar(max)') AS "Relationship Class and dataset",
 ITEMS.Definition.value('(/DERelationshipClassInfo/OriginClassNames/Name)[1]', 'nvarchar(max)') AS "Origin Class",
 ITEMS.Definition.value('(/DERelationshipClassInfo/DestinationClassNames/Name)[1]', 'nvarchar(max)') AS "Destination Class" 
FROM 
 dbo.GDB_ITEMS AS ITEMS INNER JOIN dbo.GDB_ITEMTYPES AS ITEMTYPES
 ON ITEMS.Type = ITEMTYPES.UUID
WHERE 
 ITEMTYPES.Name = 'Relationship Class';

--Queries a geodatabase in Oracle
--Returns a list of relationship classes and their member tables

SELECT
 EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/CatalogPath') AS "Relationship Class and dataset",
 EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/OriginClassNames/Name') AS "Origin Class",
 EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/DestinationClassNames/Name') AS "Destination Class" 
FROM 
 sde.GDB_ITEMS_VW ITEMS INNER JOIN sde.GDB_ITEMTYPES ITEMTYPES
 ON ITEMS.Type = ITEMTYPES.UUID
WHERE 
 ITEMTYPES.Name = 'Relationship Class';

Mit diesen Abfragen wird eine Liste der Beziehungsklassen mit den Quell- und Zielklassen zurückgegeben.

Relationship class and dataset                  Origin class                 Destination class
-----------------------------------------       --------------------         -------------------------
mygdb.myuser.speciesrel		                        mygdb.myuser.habitat         mygdb.myuser.sptable
mygdb.uruser.water\\mygdb.uruser.mainanno		  mygdb.uruser.mains           mygdb.uruser.mdiam
mygdb.hisuser.roads\\rowgrantrel		          mygdb.hisuser.row            mygdb.hisuser.rowgrantors

Laut den Ergebnissen enthält die Geodatabase die folgenden Elemente:


3/6/2012