In den Tabellen "GDB_Items" und "GDB_ItemRelationships" sind mehrere XML-Spalten vorhanden, die Informationen zum Elementschema und zu Elementbeziehungen enthalten. Insbesondere eine Spalte, die Spalte "Definition" in der Tabelle "GDB_Items", ist zum Abrufen von detaillierten Informationen zu einer Geodatabase unentbehrlich. Der enthaltene XML-Dokumenttyp hängt vom jeweiligen Elementtyp ab; die Definition einer Feature-Class enthält z. B. Informationen zu den Feldern der Tabelle, den verwendeten Domänen, Subtypes, dem Raumbezug, der Controller-Dataset-Beteiligung usw.
Die einfachste Möglichkeit, mit einem Wert in einer XML-Spalte zu arbeiten, ist, das komplette Dokument aus der Datenbank abzurufen und lokal damit zu arbeiten. Ein einfaches Beispiel dafür ist, das XML-Dokument als Datei zu speichern und in einem XML- oder Text-Viewer anzuzeigen. Entwickler mit Sprachen wie z. B. Java, C++ oder C# ziehen es möglicherweise vor, das Dokument in ein Dokumentobjektmodell (DOM) einzulesen. Für SQL-Entwickler können Datenbank-XML-Funktionen verwendet werden, um bestimmte Werte mit XPath (eine Abfragesprache für XML-Dokumente) aus Felddefinitionen abzurufen.
Ein einfaches Beispiel für eine Felddefinition ist eine Bereichsdomäne. Das unten dargestellte XML-Dokument ist eine typische Bereichsdomänendefinition:
<? 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>
Im Allgemeinen sind die zwei wichtigsten Werte für eine Bereichsdomäne 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 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
Bei einem einfachen Beispiel wie dem vorherigen ist es einfach, den XPath der Informationen zu suchen, die Sie zurückgeben möchten. Für komplexere Lösungen sollten Sie jedoch das Whitepaper XML-Schema der Geodatabase als Grundlage verwenden – insbesondere den Anhang, der für Entwickler geschrieben wurde, 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, aber beachten Sie, dass es kein Geodatabase-definiertes XML-Schema für die Spalte "Documentation" gibt. Die Spalte "Documentation" speichert die mit Geodatabase-Elementen verknüpften Metadaten. Der genaue Satz von Metadatenelementen, den sie enthält, ist jedoch je nach verwendetem Metadatenstandard und Workflow zum Verwalten der Informationen zwischen 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
Informationen zu den in Oracle verwendeten Systemtabellen und Sichten finden Sie im Abschnitt Geodatabase-Systemtabellen.