Consultas de la columna XML

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

NotaNota:

Las firmas y el comportamiento de las funciones XML varían enormemente entre los sistemas de administración de la base de datos.

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 para definiciones XPath; 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 una 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. El siguiente es el valor Definición para tal ejemplo, 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 más información sobre las tablas del sistema y las vistas utilizadas en Oracle, visite la sección "XML en tablas del sistema de geodatabase" de Un recorrido rápido por las tablas del sistema de geodatabase.


3/6/2012