Запросы к XML-столбцам

В таблицах GDB_Items и GDB_ItemRelationships есть несколько XML-столбцов, содержащих сведения о схеме и отношениях элементов. В частности, вам обязательно придется обращаться к столбцу Определение (Definition) в таблице GDB_Items, когда понадобится получить сведения о базе геоданных. Тип содержащегося в нем XML-документа зависит от типа элементов. Например, определение класса пространственных объектов содержит сведения о полях таблицы, используемом домене, подтипах, пространственной привязке, сведения о роли набора классов объектов и другие сведения.

Проще всего работать со значениями XML-столбца, когда документ полностью извлечен из базы данных и сохранен локально. Для этого XML-документ необходимо сохранить в виде файла и использовать для просмотра XML-вьюер или текстовый вьюер. Для программистов, работающих с Java, C++ или C#, будет удобнее просматривать документ в Document Object Model (DOM). Разработчики, использующие SQL, могут использовать XML-функции для извлечения отдельных значений из определений элементов с помощью выражений XPath (язык запросов для работы с XML-документами).

ПримечаниеПримечание:

В разных СУБД подписи и поведение XML-функций могут существенно отличаться.

Простым примером определения элемента является интервальный домен. Ниже приведен XML-документ с типовым определением интервального домена.

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

В принципе, в домене диапазона двумя важнейшими значениями являются минимальное и максимальное значение. Эти элементы представлены выражениями XPath /GPRangeDomain2/MinValue и /GPRangeDomain2/MaxValue, соответственно. Ниже приведен пример запроса SQL, извлекающего эти значения конкретного интервального домена.

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

В любом примере подобном вышеприведенному нетрудно найти выражения XPath для сведений, которые необходимо извлечь. Выражения XPath для более сложных решений см. в статье XML-схема базы геоданных (XML Schema of the Geodatabase), в частности в приложении для разработчиков. работающих с системными таблицами.

Запросы к другим XML-столбцам системных таблиц формируются так же, как и к столбцу Определение (Definition) таблицы GDB_Items. Учтите, что для столбца Документация (Documentation) не предусмотрено XML-схемы, определяемой базой геоданных. В столбце Документация (Documentation) содержатся метаданные, связанные с элементами базы геоданных. В разных организациях элементы метаданных, содержащиеся в этом столбце, будут отличаться, так как это зависит от стандартов метаданных и рабочих процессов, используемых для управления ими. XML-документ DTD с описанием структуры метаданных ArcGIS — ArcGISmetadatav1.dtd — предоставляется вместе с ArcGIS for Desktop и хранится во вложенной папке \Metadata\Translator\Rules в каталоге, где установлен ArcGIS.

Извлечение нескольких значений из XML-столбца

Довольно часто имеет смысл извлечь из одного XML-документа несколько значений сразу. В приведенном ниже примере используется значение определения: домен кодированных значений.

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

Как правило разработчикам и администраторам требуются пары кодов и значений с выражением XPath вида /GPCodedValueDomain2/CodedValues/CodedValue. В следующем примере показано, каким образом можно извлечь несколько значений из одного XML-определения, чтобы получить пары кода и значений для всех доменов в базе геоданных в 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

Сведения о системных таблицах и видах, используемых в Oracle, см. в разделе "XML в системных таблицах баз геоданных" документа Краткий обзор системных таблиц баз геоданных.

9/11/2013