ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Hilfe
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Die Mapping-Plattform für Ihre Organisation

ArcGIS Desktop

Ein vollständiges professionelles GIS

ArcGIS Enterprise

GIS in Ihrem Unternehmen

ArcGIS Developers

Werkzeuge zum Erstellen standortbezogener Apps

ArcGIS Solutions

Kostenlose Karten- und App-Vorlagen für Ihre Branche

ArcGIS Marketplace

Rufen Sie Apps und Daten für Ihre Organisation ab.

  • Dokumentation
  • Support
Esri
  • Anmelden
user
  • Eigenes Profil
  • Abmelden

ArcMap

  • Startseite
  • Erste Schritte
  • Karte
  • Analysieren
  • Daten verwalten
  • Werkzeuge
  • Erweiterungen

XML-Spaltenabfragen

  • Extrahieren von mehreren Werten aus einer XML-Spalte

In den Geodatabase-Systemtabellen "GDB_Items" und "GDB_ItemRelationships" sind mehrere XML-Spalten vorhanden, die Informationen zum Elementschema und zu Elementbeziehungen enthalten. Insbesondere die Spalte "Definition" in der Tabelle "GDB_Items" liefert detaillierte Informationen zu einer Geodatabase. Der Typ des in der Spalte angegebenen XML-Dokuments ist abhängig vom jeweiligen Feldtyp. Zum Beispiel enthält die Definition einer Feature-Class Informationen über die Felder, Domänen und Subtypes der Tabelle und über den Raumbezug der Geometrie, und sie gibt an, ob die Feature-Class Bestandteil eines Controller-Datasets ist.

Wenn Sie einen Wert aus einer XML-Spalte einer Systemtabelle in IBM Db2, Microsoft SQL Server oder PostgreSQL verwenden möchten, rufen Sie das gesamte XML-Dokument aus der Datenbank ab, und bearbeiten Sie es lokal in einem XML- oder Text-Editor. Entwickler mit Sprachen wie z. B. Java, C++ oder C# ziehen es möglicherweise vor, das Dokument in ein Dokumentobjektmodell (DOM) einzulesen. SQL-Entwickler können Datenbank-XML-Funktionen verwenden, um bestimmte Werte mit XPath (einer Abfragesprache für XML-Dokumente) aus Felddefinitionen abzurufen.

In Geodatabases in Oracle und IBM Informix verwenden die XML-Spalten ArcSDE-XML, das Informationen als BLOBs in einer Reihe von separaten Tabellen speichert. Auf diese kann direkt mit SQL zugegriffen werden.

Damit Sie die Inhalte der XML-Spalten in den Systemtabellen in Geodatabases in Oracle anzeigen können, gibt es zwei Systemsichten, in denen die Inhalte aus den XML-Spalten der Geodatabase-Systemtabelle in einem CLOB-Datentyp gespeichert werden. "GDB_Items_vw" zeigt den Inhalt der Spalten Definition, Documentation und ItemInfo in der Tabelle "GDB_Items" in CLOBs an. In "GDB_ItemRelationships_vw" wird der Inhalt der Spalte Attributes der Tabelle "GDB_ItemRelationships" in einem CLOB angezeigt. CLOBs können als Text gelesen werden.

Hinweis:

Die Signaturen und das Verhalten von XML-Funktionen sind je nach Datenbankmanagementsystem sehr unterschiedlich.

Das folgende Beispiel zeigt die Felddefinition einer Bereichsdomänendefinition in einem XML-Dokument:

<? 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>

Die zwei wichtigsten Werte für eine Bereichsdomäne sind die Minimal- und Maximalwerte. Die XPath-Ausdrücke, die diese Elemente darstellen, sind /GPRangeDomain2/MinValue und /GPRangeDomain2/MaxValue. Diese SQL-Abfrage zeigt, wie diese Werte für eine bestimmte Bereichsdomäne in einer Geodatabase in SQL Server extrahiert werden:

--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

Das genannte Beispiel ist relativ einfach. Verwenden Sie für komplexere Lösungen das Whitepaper XML Schema of the Geodatabase als Grundlage – insbesondere den Anhang, der sich an Entwickler richtet, die mit Systemtabellen arbeiten.

Die anderen XML-Spalten in den Systemtabellen können auf die gleiche Weise wie die Spalte "Definition" der Tabelle "GDB_Items" abgefragt werden; beachten Sie aber, dass es kein durch die Geodatabase definiertes XML-Schema für die Spalte "Documentation" gibt. Die Spalte "Documentation" speichert die mit Geodatabase-Elementen verknüpften Metadaten. Welche Metadatenelemente genau enthalten sind, ist jedoch je nach verwendetem Metadatenstandard und Workflow zum Verwalten der Informationen der Organisationen unterschiedlich. Eine XML-DTD, die die Struktur der ArcGIS-Metadaten beschreibt (ArcGISmetadatav1.dtd), wird in ArcGIS Desktop im Unterordner \Metadata\Translator\Rules des ArcGIS-Installationsverzeichnisses bereitgestellt.

Extrahieren von mehreren Werten aus einer XML-Spalte

Es gibt viele Fälle, für die es sinnvoll ist, mehrere Werte aus einem einzelnen XML-Dokument zu extrahieren. Unten sehen Sie den Wert Definition für ein solches Beispiel, eine Domäne mit codierten Werten:

<? 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>

Die Werte, die normalerweise am interessantesten für Entwickler und Administratoren sind, sind die Code- und Wertpaare, die den XPath-Ausdruck /GPCodedValueDomain2/CodedValues/CodedValue aufweisen. Im folgenden Beispiel wird gezeigt, wie mehrere Werte aus einer einzelnen XML-Definition extrahiert werden, um die Code- und Wertpaare für alle Domänen in einer Geodatabase in SQL Server abzurufen:

-- 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

  • Startseite
  • Dokumentation
  • Support

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

Über Esri

  • Über uns
  • Karriere
  • Esri Blog
  • User Conference
  • Developer Summit
Esri
Wir sind an Ihrer Meinung interessiert.
Copyright © 2021 Esri. | Datenschutz | Rechtliches