Формирование xml произвольной структуры
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 - позволяют делать ссылки на другие элементы. Эти атрибуты имеют значение, только если создается схема данных.