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:
- Eine eigenständige Beziehungsklasse mit dem Namen "speciesrel", die sich aus der Feature-Class "Habitat" und der Tabelle "sptable" zusammensetzt.
- Eine Feature-bezogene Annotation-Klasse im Feature-Dataset "water", die sich aus den Feature-Classes "mains" und "mdiam" zusammensetzt.
- Die Beziehungsklasse "rowgrantrel", die im Feature-Dataset "roads" enthalten ist und deren Bestandteile die Tabellen "row" und "rowgrantors" sind.