- •Iis и xml функции sql Server
- •Поддержка xml в Microsoft sql Server 2000
- •Примеры
- •Iis и xml функции sql Server
- •Шаблоны
- •Запросы xPath
- •Замечания по разделу
- •Возможности ado 2.5 Сохранение и загрузка из файла в формате xml
- •Выдача Recordset’а в формате xml непосредственно в поток Response
- •Трансформация с помощью domDocument
- •Возможности ado 2.6
- •Использование Command для формирования xml-документа на сервере
- •Выполнение шаблона
- •Выполнение запроса xPath
- •Шаблон с агрегатными функциями
- •Формирование xml-документа на клиенте с помощью ado
- •Апдейтаграммы и xml Bulk Load
- •Апдейтаграммы
- •Добавление данных
- •Обновление данных
- •Удаление
- •Создание новой таблицы и загрузка данных
- •Загрузка иерархических документов
- •Заключение
- •Литература
- •Предисловие
- •Настройка iis
- •Содержание wsdl-файла
- •Секция types
- •Секция message
- •Секция portType
- •Формы сообщений
- •Секция binding
- •Секция service
- •Создание Web-методов
- •Тестируем Web-сервис
- •Поддержка sqlxml в .Net Framework
- •Тестовый проект
- •Цели и ограничения
- •Реализация
- •Заключение
- •Литература
- •Тип данных xml Основы
- •Метод query
- •Метод value
- •Метод exist
- •Метод modify
- •Использование xml-типа
- •Хранение xml-типа
- •Поддержка xml Schema
- •Создание схемы
- •Удаление схемы
- •Ограничения текущей реализации
- •Безопасность
- •Вложенные запросы for xml
- •Генерация xsd на лету
- •Поддержка xQuery
- •Тело запроса
- •Конструкторы узлов
- •Операторы сравнения
- •Операторы сравнения атомарных значений
- •Общие операторы сравнения
- •Операторы сравнения узлов
- •Логические операторы
- •Условные выражения
- •Flwor-выражения
- •Кванторные выражения
- •Сортировка
- •Заключение
- •Литература
Операторы сравнения
В XQuery (а точнее, в XPath 2.0) существует три типа операторов сравнения: общие операторы сравнения, операторы сравнения атомарных значений и операторы сравнения узлов.
Операторы сравнения атомарных значений
Операторы сравнения атомарных значений (value comparision operators) – новый тип операторов, тип операндов которых ограничен атомарными значениями, т.е. в качестве операндов не могут выступать последовательности.
К ним относятся eq – равно, ne – не равно, lt – меньше, gt – больше, le – меньше или равно, ge – больше или равно.
Типы операндов должны быть одинаковыми.
Примеры:
declare @xml xml set @xml = '<a>1</a><a>2</a>' select @xml::query(' {-- true --} sum(/a) ge 2, {-- true --} /a[1] ge 1 ') |
Общие операторы сравнения
Общие операторы сравнения (general comparision operators) больше всего напоминают операторы сравнения XPath 1.0. Различие заключается в том, что новые операторы работают с последовательностями элементов.
К общим операторам сравнения относятся <, >, <=, >=, = и !=.
Когда общий оператор применяется к двум последовательностям элементов, результатом является истина в том случае, если хотя бы один элемент в первой последовательности удовлетворяет соответствующему условию, примененному к любому элементу второй последовательности. Фактически, это то же самое правило, которое действовало в XPath 1.0, когда операндами оператора сравнения были наборы узлов. Что означает данное правило на практике? Данный оператор сравнения берет поочередно каждый элемент первой последовательности и применяет соответствующий атомарный оператор сравнения к каждому элементу из второй последовательности. Как видно, это довольно медленная операция. Ее трудоемкость достаточно велика – O(n*m), где n – размер первой последовательности и m – размер второй. Правда, процессор вовсе не обязан просматривать все элементы обоих последовательностей – он может завершить работу сразу же, как только для какой-либо пары оператор сравнения вернет истинное значение.
Несколько примеров:
declare @xml xml set @xml = '<a>1</a><a>2</a>' select @xml::query(' {-- false – нет ни одного элемента из первой последовательности, меньшего, чем любой элемент из второй последовательноси --} (10, 20, 30) < (1, 2) , {-- true - первый элемент первой последовательности меньше последнего элемента второй последовательности --} (10, 20, 30) < (1, 20) , {-- true - последний элемент первой последовательности равен единственному элементу второй последовательности --} (1, 2, 3) = (3) , {-- true - последний элемент первой последовательности равен единственному элементу второй последовательности /a - возвращает последовательность из двух элементов --} /a = 2 ') |
Операторы сравнения узлов
Операторы сравнения узлов (node comparison operators), как следует из названия, принимают в качестве типов операндов только узлы.
К операторам сравнения узлов относятся: is – проверка идентичности узлов, << и >> - сравнение позиции элементов относительно порядка документа.
Результатом применения операторов сравнения не всегда является булева переменная. Если в качестве одного или обоих операндов выступает пустая последовательность, результатом будет пустая последовательность.
Например:
declare @xml xml set @xml = '<a>1</a><a>2</a>' select @xml::query(' {-- true - первый узел а предшествует второму --} /a[1] << /a[2] , {-- false - первый узел а не предшествует второму --} /a[1] >> /a[2] , {-- false - первый узел а не является вторым узлом а --} /a[1] is /a[2] ') |
В SQL Server реализован еще один оператор сравнения узлов – isnot, который был в рабочих спецификациях в 2002 году, но отсутствует в нынешней рабочей спецификации. Результат его обратен результату оператора is.
