例:リレーションシップ クラスのリストの検索方法
すべてのアイテムの定義は、GDB_ITEMS テーブルの DEFINITION 列に格納されます。どのアイテムがリレーションシップ クラスであるかを特定するには、検索結果がリレーションシップ クラス タイプのアイテムだけになるように絞り込む必要があります。あるアイテムがリレーションシップ クラスであると定義する情報は、GDB_ItemTypes テーブルの NAME 列に格納されています。GDB_Items テーブル(Oracle の場合は GDB_Items_vw ビュー)の TYPE 列および GDB_ItemTypes テーブルの UUID 列を結合し、GDB_ItemTypes テーブルからリレーションシップ クラスを検索することができます。
次の例では、リレーションシップ クラス(および、該当する場合、そのリレーションシップクラスが存在するフィーチャ データセット)の名前と、リレーションシップ クラスに参加しているテーブルおよびフィーチャクラスの名前が検索されます。また、ジオデータベースを検索すると、フィーチャリンク アノテーションも返されます。これは、フィーチャリンク アノテーションもリレーションシップ クラスの 1 つのタイプであるからです。
--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';
これらの検索を行うと、リレーションシップ クラス、およびリレーションシップ クラスに参加している関連元クラスと関連先クラスのリストが返されます。
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
検索結果はジオデータベースに以下のクラスが格納されていることを示しています。
- フィーチャクラス habitat およびテーブル sptable が参加している speciesrel という名前のスタンドアロン リレーションシップ クラス
- フィーチャクラス mains および mdiam が参加しているフィーチャ データセット water に存在するフィーチャリンク アノテーション クラス
- roads フィーチャ データセット内にあり、row および rowgrantors テーブルが参加しているリレーションシップ クラス rowgrantrel
3/6/2012