XML-Spaltenabfragen
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.
Die Signaturen und das Verhalten von XML-Funktionen sind je nach Datenbankmanagementsystem sehr unterschiedlich.
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 die XPath-Definitionen im 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 Definitionswert 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 "XML in Geodatabase-Systemtabellen" in Kurzer Überblick über Geodatabase-Systemtabellen.