Existen varias columnas XML en las tablas GDB_Items y GDB_ItemRelationships que contienen información sobre el esquema de elementos y las relaciones de elementos. La columna Definición de la tabla GDB_Items, es indispensable para obtener información detallada sobre una geodatabase. El tipo de documento XML que contiene depende del tipo de elemento específico; por ejemplo, la definición de una clase de entidad contiene información sobre los campos de la tabla, los dominios utilizados, los subtipos, la referencia espacial y la participación del dataset controlador, entre otros.
La forma más simple de trabajar con un valor de una columna XML es recuperar el documento completo de la base de datos y trabajar con él a nivel local. Un ejemplo sencillo de esto sería guardar el documento XML como un archivo y visualizarlo en un XML o visor de texto. Es posible que los desarrolladores que utilizan lenguajes como Java, C++ o C# prefieran leer el documento en un Modelo de objetos del documento (DOM). Para los desarrolladores SQL, las funciones XML de la base de datos se pueden utilizar para recuperar valores específicos de definiciones de elementos mediante XPath (un lenguaje de consultas para documentos XML).
Un ejemplo sencillo de la definición de un elemento es el de un dominio de rango. El siguiente documento XML es una definición típica del dominio de rango:
<? 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>
En términos generales, los dos valores más importantes para un dominio de rango son los valores mínimo y máximo. Las expresiones XPath que representan estos elementos son /GPRangeDomain2/MinValue y /GPRangeDomain2/MaxValue, respectivamente. Esta consulta SQL muestra cómo extraer estos valores para un dominio de rango específico:
--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
Dado un ejemplo simple como el anterior, resulta fácil encontrar las expresiones XPath de la información que desea obtener. Sin embargo, para las soluciones más complejas, consulte el documento Esquema XML de la geodatabase, especialmente el apéndice orientado a los desarrolladores que trabajan con las tablas del sistema.
Las otras columnas XML en las tablas del sistema se pueden consultar del mismo modo que la columna Definición de la tabla GDB_Items, pero tenga en cuenta que no hay un esquema XML definido por la geodatabase para la columna Documentación. La columna Documentación almacena los metadatos asociados con los elementos de la geodatabase. No obstante, el conjunto exacto de elementos de metadatos que contiene varía entre las organizaciones basadas en los metadatos estándar que siguen y el flujo de trabajo para administrar la información. Se incluye un DTD XML que describe la estructura de los metadatos de ArcGIS, ArcGISmetadatav1.dtd, con ArcGIS Desktop en la subcarpeta \Metadata\Translator\Rules del directorio de instalación de ArcGIS.
Extraer varios valores de una columna XML
Hay muchos casos en los que resulta útil extraer varios valores de un único documento XML. Como ejemplo, el siguiente es el valor Definition, un dominio de valor codificado.
<? 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>
Los valores que suelen ser de mayor interés para desarrolladores y administradores son los pares de código y valor, que tienen una expresión XPath de /GPCodedValueDomain2/CodedValues/CodedValue. El siguiente ejemplo muestra cómo extraer varios valores de una única definición XML para obtener los pares de código y valor para todos los dominios en una geodatabase en 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
Para obtener información sobre las tablas y vistas del sistema que se utilizan en Oracle, consulte Tablas del sistema de geodatabase.