Формирование xml произвольной структуры — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
Строка 1: Строка 1:
FOR XML EXPLICIT
 
  
В данном режиме можно формировать практически любые документы; структура результирующего XML-документа определяется непосредственно в самом запросе. Запрос может принимать очень сложный вид, ниже будут рассмотрены правила, по которым он составляется.
 
  
Первое поле всегда называется tag и представляет собой числовой идентификатор таблицы. Вы можете указывать для него любые числовые значения. В результирующем документе он не появляется, и нужен только, чтобы определить связи между таблицами для формирования иерархического документа. Второе поле называется parent и тоже может представлять любой числовой идентификатор. Он определяет родительскую таблицу для данной таблицы и в результирующем документе также не присутствует. Если родитель отсутствует, указывается 0 или NULL. Для иерархических выборок нужно использовать несколько запросов, объединенных с помощью оператора UNION ALL.
+
___TOC___
  
После двух обязательных полей tag и parent следуют поля, которые требуется выбрать из таблицы. Для них должен быть задан псевдоним, определяющий тип XML-узла, его название и другую информацию.  
+
===Введение===
 +
в данной статье будет рассмотрено формирование xml структур. Необходимость в данном механизме возникает как правило из-за требований сторонних систем, либо когда необходимо вернуть массив данных в сценарии Oktell (Oktell может получать только набор столбцов одной строки).  
 +
Для этого будем использовать один из режимов для FOR XML, более подробно Вы можете ознакомиться по ссылкам:
 +
*[https://msdn.microsoft.com/ru-ru/library/ms189068(v=sql.105).aspx Использование режима EXPLICIT]
  
Вот синтаксис этого псевдонима:
+
 
 +
===Режим FOR XML EXPLICIT===
 +
 
 +
Режим EXPLICIT предоставляет наибольшую гибкость при формировании желаемого XML из результатов запроса.
 +
Запрос в режиме EXPLICIT должен быть написан особым способом, при котором в запросе явно задаются дополнительные сведения о требуемом XML, такие как ожидаемый уровень вложенности в XML. В зависимости от запрашиваемого XML написание запросов режима EXPLICIT может оказаться весьма трудоемким. Может оказаться, что использование режима PATH с вложениями является более простой альтернативой написанию запросов в режиме EXPLICIT.
 +
 
 +
Режим EXPLICIT преобразует набор строк, получаемый в результате выполнения запроса, в XML-документ. Для того чтобы режим EXPLICIT создал XML-документ, набор строк должен иметь определенный формат. То есть необходимо написать запрос SELECT для создания набора строк, универсальной таблицы, имеющей определенный формат, так чтобы логика обработки могла создать желаемый XML.
 +
Во-первых, запрос должен создавать следующие два столбца метаданных:
 +
первый столбец должен предоставлять номер тега текущего элемента (целочисленного типа), и этот столбец должен иметь имя Tag. В запросе должен быть указан уникальный номер тега для каждого элемента, который будет создан из набора строк;
 +
второй столбец должен задавать номер тега для родительского элемента, и этот столбец должен иметь имя Parent. Таким образом, столбцы Tag и Parent предоставляют сведения об иерархии.
 +
Значения этих столбцов метаданных вместе со сведениями в именах столбцов используются для создания желаемого XML. Обратите внимание на то, что имена столбцов в запросе должны задаваться особым образом. Также обратите внимание на то, что значение 0 или NULL в столбце Parent указывает на то, что у соответствующего элемента нет родителя. Такой элемент добавляется в XML в качестве элемента верхнего уровня.
 +
 
 +
 
 +
При написании запросов в режиме EXPLICIT имена столбцов в результирующем наборе строк должны быть заданы с использованием описанного далее формата. Они предоставляют сведения о преобразовании, включая имена элементов и атрибутов и другие дополнительные сведения, задаваемые при помощи директив.
 +
Общий формат имеет вид:
  
 
  ElementName!TagNumber!AttributeName!Directive
 
  ElementName!TagNumber!AttributeName!Directive
  
Рассмотрим назначение каждой из частей этого псевдонима:
 
  
*ElementName – имя элемента, в котором будет находится элемент данного поля. Обычно здесь указывается имя таблицы.
+
,где
*TagNumber – идентификатор таблицы, в которой находится данное поле. Одному и тому же ElementName всегда должен соответствовать один TagNumber. Он также не отображается ни в каком виде в результирующем документе, однако нужен для определения иерархических связей между таблицами.
+
*ElementName - Результирующий общий идентификатор элемента. Например, если Customers задано в качестве ElementName, формируется элемент <Customers>.
*AttributeName имя атрибута (или элемента), представляющего данное поле.
+
*TagNumber - Уникальное значение тега, присвоенное элементу. Это значение с помощью двух метастолбцов, Tag и Parent, определяет вложенность элементов в результирующем XML.
*Directive – по существу, представляет собой тип узла. Может принимать следующие значения:
+
*AttributeName - Предоставляет имя создаваемого атрибута для указанного элемента ElementName. Это поведение используется, если не задано значение Directive. Если задано значение Directive, имеющее тип xml, cdata или element, оно используется для создания дочернего элемента ElementName, к которому добавляется значение столбца. При указании значения Directive значение AttributeName может быть пустым. Например: ElementName!TagNumber!!Directive. В этом случае значение столбца напрямую содержится в ElementName.
**element - поле представляется в виде элемента
+
*Directive - Значение Directive является необязательным и может использоваться для предоставления дополнительных сведений для создания XML.
**xml - То же самое, что element, но не выполняет трансформации текста. Например, символ меньше (<) не превращается в ссылку &lt;
+
 
**cdata - значение поля обрамляется соответствующим образом. Имя атрибута указывать совместно с этим ключевым словом нельзя.
+
 
**hide - позволяет скрыть поле
+
===Пример===
**id,idref,idrefs - позволяют делать ссылки на другие элементы. Эти атрибуты имеют значение, только если создается схема данных.
+

Версия 10:35, 27 июля 2015


_ _

Введение

в данной статье будет рассмотрено формирование xml структур. Необходимость в данном механизме возникает как правило из-за требований сторонних систем, либо когда необходимо вернуть массив данных в сценарии Oktell (Oktell может получать только набор столбцов одной строки). Для этого будем использовать один из режимов для FOR XML, более подробно Вы можете ознакомиться по ссылкам:


Режим FOR XML EXPLICIT

Режим EXPLICIT предоставляет наибольшую гибкость при формировании желаемого XML из результатов запроса. Запрос в режиме EXPLICIT должен быть написан особым способом, при котором в запросе явно задаются дополнительные сведения о требуемом XML, такие как ожидаемый уровень вложенности в XML. В зависимости от запрашиваемого XML написание запросов режима EXPLICIT может оказаться весьма трудоемким. Может оказаться, что использование режима PATH с вложениями является более простой альтернативой написанию запросов в режиме EXPLICIT.

Режим EXPLICIT преобразует набор строк, получаемый в результате выполнения запроса, в XML-документ. Для того чтобы режим EXPLICIT создал XML-документ, набор строк должен иметь определенный формат. То есть необходимо написать запрос SELECT для создания набора строк, универсальной таблицы, имеющей определенный формат, так чтобы логика обработки могла создать желаемый XML. Во-первых, запрос должен создавать следующие два столбца метаданных: первый столбец должен предоставлять номер тега текущего элемента (целочисленного типа), и этот столбец должен иметь имя Tag. В запросе должен быть указан уникальный номер тега для каждого элемента, который будет создан из набора строк; второй столбец должен задавать номер тега для родительского элемента, и этот столбец должен иметь имя Parent. Таким образом, столбцы Tag и Parent предоставляют сведения об иерархии. Значения этих столбцов метаданных вместе со сведениями в именах столбцов используются для создания желаемого XML. Обратите внимание на то, что имена столбцов в запросе должны задаваться особым образом. Также обратите внимание на то, что значение 0 или NULL в столбце Parent указывает на то, что у соответствующего элемента нет родителя. Такой элемент добавляется в XML в качестве элемента верхнего уровня.


При написании запросов в режиме EXPLICIT имена столбцов в результирующем наборе строк должны быть заданы с использованием описанного далее формата. Они предоставляют сведения о преобразовании, включая имена элементов и атрибутов и другие дополнительные сведения, задаваемые при помощи директив. Общий формат имеет вид:

ElementName!TagNumber!AttributeName!Directive


,где

  • ElementName - Результирующий общий идентификатор элемента. Например, если Customers задано в качестве ElementName, формируется элемент <Customers>.
  • TagNumber - Уникальное значение тега, присвоенное элементу. Это значение с помощью двух метастолбцов, Tag и Parent, определяет вложенность элементов в результирующем XML.
  • AttributeName - Предоставляет имя создаваемого атрибута для указанного элемента ElementName. Это поведение используется, если не задано значение Directive. Если задано значение Directive, имеющее тип xml, cdata или element, оно используется для создания дочернего элемента ElementName, к которому добавляется значение столбца. При указании значения Directive значение AttributeName может быть пустым. Например: ElementName!TagNumber!!Directive. В этом случае значение столбца напрямую содержится в ElementName.
  • Directive - Значение Directive является необязательным и может использоваться для предоставления дополнительных сведений для создания XML.


Пример