Выражения пути (XQuery)

Выражения пути XQuery определяют местонахождение узлов, например элементов, атрибутов и текстовых узлов, в документе. Результат выражения пути всегда возвращается согласно порядку расположения узлов в документе, и узлы в результирующей последовательности не дублируются. Указывая путь, можно использовать полный или сокращенный синтаксис. Далее рассматривается полный синтаксис. Сокращенный синтаксис описывается ниже в этом разделе.

Примечание

Так как образцы запросов в этом разделе требуют наличия столбцов типа xml, CatalogDescription и Instructions таблицы ProductModel, следует ознакомиться с содержимым и структурой XML-документов, хранящихся в этих столбцах.

Путь в выражении может быть относительным или абсолютным. Ниже приведено описание обоих типов.

  • Выражение относительного пути составляется из одного или более шагов, разделенных одним или двумя знаками косой черты (/ или //). Например child::Features — выражение относительного пути, где Child относится только к дочерним узлам текущего узла. Текущим называется узел, обрабатываемый в данный момент. Выражение получает дочерние узлы, элементы <Features> текущего узла.

  • Выражение абсолютного пути начинается с одного или двух знаков косой черты (/ или //), за которыми следует необязательный относительный путь. Например, знак косой черты в начале выражения /child::ProductDescription означает, что это выражение абсолютного пути. Так как знак косой черты в начале выражения возвращает корневой узел документа текущего узла, это выражение возвращает все дочерние узлы, элементы <ProductDescription> корневого элемента документа.

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

Типичное выражение пути состоит из шагов. Например, выражение абсолютного пути /child::ProductDescription/child::Summaryсодержит два шага, разделенные косой чертой.

  • Первый шаг получает дочерние узлы, элементы <ProductDescription> корневого узла документа.

  • Второй шаг получает дочерние узлы, элементы <Summary> для каждого из полученных ранее элементов <ProductDescription>, которые по очереди становятся текущими узлами.

Шаг в выражении пути может быть шагом оси или основным шагом.

Шаг оси

Шаг оси в выражении пути включает в себя следующие компоненты.

  • ось
    Определяет направление движения. Шаг оси в выражении пути, начинающегося с текущего узла и ведущего к узлам, доступным в направлении, указанным осью.

  • проверка узла
    Задает тип или имена узлов, которые будут выбраны.

  • Ноль или более необязательных предикатов
    Фильтруют узлы, выбирая одни и пропуская другие.

В следующих примерах в выражениях пути используются шаги оси.

  • Выражение абсолютного пути /child::ProductDescription содержит только один шаг. Оно определяет ось (child) и проверку узла (ProductDescription).

  • Выражение относительного пути child::ProductDescription/child::Features содержит два шага, разделенных косой чертой. Оба шага задают ось — дочерние элементы. ProductDescription и Features — проверки узлов.

  • Выражение относительного пути child::root/child::Location[attribute::LocationID=10]содержит два шага, разделенные косой чертой. Первый шаг определяет ось (child) и проверку узла (root). Второй шаг содержит все три компонента шага оси: ось (child), проверку узлов (Location) и предикат ([attribute::LocationID=10]).

Дополнительные сведения о компонентах шага оси см. в разделах Указание оси на шаге выражения пути, Установка проверки узла в шаге выражения пути и Определение предикатов в шаге выражения пути.

Основной шаг

Основной шаг представляет собой обычное выражение, значением которого должна быть последовательность узлов.

Реализация XQuery в SQL Server допускает основные шаги в первых шагах выражений пути. Далее приведены примеры выражений пути с использованием основных шагов.

(/a, /b)/c
id(/a/b)

Дополнительные сведения о функции id см. в разделе Функция id (XQuery).

В этом разделе