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

Материал из Oktell
Перейти к: навигация, поиск

FOR XML EXPLICIT

В данном режиме можно формировать практически любые документы; структура результирующего XML-документа определяется непосредственно в самом запросе. Запрос может принимать очень сложный вид, ниже будут рассмотрены правила, по которым он составляется.

Первое поле всегда называется tag и представляет собой числовой идентификатор таблицы. Вы можете указывать для него любые числовые значения. В результирующем документе он не появляется, и нужен только, чтобы определить связи между таблицами для формирования иерархического документа. Второе поле называется parent и тоже может представлять любой числовой идентификатор. Он определяет родительскую таблицу для данной таблицы и в результирующем документе также не присутствует. Если родитель отсутствует, указывается 0 или NULL. Для иерархических выборок нужно использовать несколько запросов, объединенных с помощью оператора UNION ALL.

После двух обязательных полей tag и parent следуют поля, которые требуется выбрать из таблицы. Для них должен быть задан псевдоним, определяющий тип XML-узла, его название и другую информацию.

Вот синтаксис этого псевдонима:

ElementName!TagNumber!AttributeName!Directive

Рассмотрим назначение каждой из частей этого псевдонима:

  • ElementName – имя элемента, в котором будет находится элемент данного поля. Обычно здесь указывается имя таблицы.
  • TagNumber – идентификатор таблицы, в которой находится данное поле. Одному и тому же ElementName всегда должен соответствовать один TagNumber. Он также не отображается ни в каком виде в результирующем документе, однако нужен для определения иерархических связей между таблицами.
  • AttributeName – имя атрибута (или элемента), представляющего данное поле.
  • Directive – по существу, представляет собой тип узла. Может принимать следующие значения:
    • element - поле представляется в виде элемента
    • xml - То же самое, что element, но не выполняет трансформации текста. Например, символ меньше (<) не превращается в ссылку <
    • cdata - значение поля обрамляется соответствующим образом. Имя атрибута указывать совместно с этим ключевым словом нельзя.
    • hide - позволяет скрыть поле
    • id,idref,idrefs - позволяют делать ссылки на другие элементы. Эти атрибуты имеют значение, только если создается схема данных.