ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • ヘルプ
  • Sign Out
ArcGIS Desktop

ArcGIS Online

組織のマッピング プラットフォーム

ArcGIS Desktop

完全なプロ仕様の GIS

ArcGIS Enterprise

エンタープライズ GIS

ArcGIS for Developers

位置情報利用アプリの開発ツール

ArcGIS Solutions

各種業界向けの無料のテンプレート マップおよびテンプレート アプリケーション

ArcGIS Marketplace

組織で使えるアプリとデータを取得

  • ドキュメント
  • サポート
Esri
  • サイン イン
user
  • マイ プロフィール
  • サイン アウト

ArcMap

  • ホーム
  • はじめに
  • マップ
  • 解析
  • データ管理
  • ツール
  • エクステンション

XML 列の検索

  • XML 列からの複数の値の抽出

GDB_Items テーブルと GDB_ItemRelationships ジオデータベース システム テーブルには、アイテムのスキーマとアイテムの関係に関する情報を持つ複数の XML 列があります。特に、GDB_Items テーブルの [Definition] という列は、ジオデータベースの詳細情報を提供します。この列が格納する XML ドキュメントのタイプは、特定のアイテム タイプによって決まります。たとえば、フィーチャクラスの定義には、テーブルのフィールド、適用されるドメインとサブタイプ、ジオメトリの空間参照、およびフィーチャクラスがコントローラー データセットに属しているかどうかに関する情報が含まれます。

IBM Db2、Microsoft SQL Server、または PostgreSQL のシステム テーブル内の XML 列の値を操作するには、データベースから XML ドキュメント全体を取得し、XML ビューアーまたはテキスト ビューアーでローカルに操作します。Java、C++、C# などの言語を使用している開発者は、ドキュメントを DOM (Document Object Model) に読み込むこともできます。SQL 開発者は、データベース XML 関数を使用して、XPath (XML ドキュメント用のクエリ言語) でアイテム定義から特定の値を取得できます。

Oracle と Informix のジオデータベースの場合、XML 列では ArcSDE XML が使用され、一連の別テーブルに BLOB として情報が格納されます。そのため、SQL で XML 列に直接アクセスすることはできません。

Oracle のジオデータベースでシステム テーブルの XML 列の内容を表示できるように、ジオデータベース システム テーブルの XML 列の内容を CLOB データ タイプで格納するシステム ビューが 2 つ用意されています。GDB_Items_vw は、GDB_Items テーブルの Definition、Documentation、ItemInfo の各列の内容を CLOB 列に格納します。GDB_ItemRelationships_vw は、GDB_Relationships テーブルの Attributes 列の内容を CLOB 列に格納します。CLOB 列の内容はテキストとして読み取ることができます。

備考:

XML 関数のシグネチャと振舞いは、データベース管理システムによって大きく異なります。

以下の例は、XML ドキュメント内の範囲ドメイン定義のアイテム定義を示しています。

<? xml version = "1.0" encoding="utf-8"?>
<GPRangeDomain2
     xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
     xmlns:xs = "http://www.w3.org/2001/XMLSchema"
     xmlns:typens = "http://www.esri.com/schemas/ArcGIS/10.0"
     xsi:type = "typens:GPRangeDomain2">
  <DomainName>Angle</DomainName>
  <FieldType>esriFieldTypeInteger</FieldType>
  <MergePolicy>esriMPTDefaultValue</MergePolicy>
  <SplitPolicy>esriSPTDuplicate</SplitPolicy>
  <Description>Valid rotation angles</Description>
  <Owner>harley</Owner>
  <MaxValue xsi:type = "xs:int">359</MaxValue>
  <MinValue xsi:type = "xs:int">0</MinValue>
</GPRangeDomain2>

範囲ドメインの最も重要な値は、最小値と最大値です。これらのエレメントを表す XPath 式は、それぞれ /GPRangeDomain2/MinValue と /GPRangeDomain2/MaxValue です。次の SQL クエリは、SQL Server のジオデータベース内の特定の範囲ドメインにおけるこれらの値の抽出方法を示しています。

--Queries an sde-schema geodatabase in SQL Server
SELECT
  Definition.value('(/GPRangeDomain2/MinValue)[1]','nvarchar(max)') AS "MinValue",
  Definition.value('(/GPRangeDomain2/MaxValue)[1]','nvarchar(max)') AS "MaxValue"
FROM
  sde.GDB_ITEMS INNER JOIN sde.GDB_ITEMTYPES
  ON sde.GDB_ITEMS.Type = sde.GDB_ITEMTYPES.UUID
WHERE
  sde.GDB_ITEMS.Name = 'Angle' AND
  sde.GDB_ITEMTYPES.Name = 'Range Domain'
MinValue   MaxValue
      0         359

前の例は、比較的シンプルです。これより複雑な情報の取得方法については、「XML Schema of the Geodatabase」というホワイト ペーパー (特に、システム テーブルを操作する開発者を対象とした付録) をご参照ください。

システム テーブルの他の XML 列も、GDB_Items テーブルの [Definition] 列と同じ方法で検索できます。ただし、[Documentation] 列には、ジオデータベースによって定義された XML スキーマはないので注意してください。[Documentation] 列には、ジオデータベース アイテムに関連付けられたメタデータが格納されます。ただし、含まれるメタデータ エレメント群は、組織のメタデータ標準と情報管理のワークフローに基づくため、各組織によって異なります。ArcGIS メタデータの構造を記述している XML DTD (ArcGISmetadatav1.dtd) は、ArcGIS Desktop に付属しており、ArcGIS のインストール ディレクトリの \Metadata\Translator\Rules サブフォルダーにあります。

XML 列からの複数の値の抽出

1 つの XML ドキュメントから複数の値を抽出するケースがあります。以下に、そのような例の 1 つであるコード値ドメインの Definition 値を示します。

<? xml version = "1.0" encoding="utf-8"?>
<GPCodedValueDomain2
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xs = "http://www.w3.org/2001/XMLSchema"
    xmlns:typens = "http://www.esri.com/schemas/ArcGIS/10.0"
  <DomainName>Material</DomainName>
  <FieldType>esriFieldTypeString</FieldType>
  <MergePolicy>esriMPTDefaultValue</MergePolicy>
  <SplitPolicy>esriSPTDuplicate</SplitPolicy>
  <Description>Valid pipe materials</Description>
  <Owner>aelflad</Owner>
  <CodedValues xsi:type= "typens:ArrayOfCodedValue">
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Cast iron</Name>
     <Code xsi:type= "xs:string">CI</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Ductile iron</Name>
     <Code xsi:type= "xs:string">DI</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>PVC</Name>
     <Code xsi:type= "xs:string">PVC</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Asbestos concrete</Name>
     <Code xsi:type= "xs:string">AC</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Copper</Name>
     <Code xsi:type= "xs:string">COP</Code>
   </CodedValue>
  </CodedValues>
</GPCodedValueDomain2>

開発者と管理者が最も興味を持つ値は通常、コードと値の組み合わせです。これは、/GPCodedValueDomain2/CodedValues/CodedValue という XPath 式を持ちます。次の例は、1 つの XML 定義から複数の値を抽出し、SQL Server のジオデータベース内にあるすべてのドメインについて、コードと値の組み合わせを取得する方法を示しています。

-- Get the code/value pairs for each coded value domain in the geodatabase.
SELECT
   codedValue.value('Code[1]', 'nvarchar(max)') AS "Code",
   codedValue.value('Name[1]', 'nvarchar(max)') AS "Value"
FROM
   dbo.GDB_ITEMS AS items INNER JOIN dbo.GDB_ITEMTYPES AS itemtypes
   ON items.Type = itemtypes.UUID
CROSS APPLY
   items.Definition.nodes
    ('/GPCodedValueDomain2/CodedValues/CodedValue') AS CodedValues(codedValue)
WHERE
   itemtypes.Name = 'Coded Value Domain' AND
   items.Name = 'Material'
Code    Value
CI      Cast iron
DI      Ductile iron
PVC     PVC
AC      Asbestos concrete
COP     Copper

ArcGIS Desktop

  • ホーム
  • ドキュメント
  • サポート

ArcGIS プラットフォーム

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Esri について

  • 会社概要
  • 採用情報
  • Esri ブログ
  • ユーザ カンファレンス
  • デベロッパ サミット
Esri
ご意見・ご感想をお寄せください。
Copyright © 2019 Esri. | プライバシー | リーガル