Поделиться через


Задание проверки узла в пути доступа (SQLXML 4.0)

Проверка узла задает тип узла, выбранного на шаге доступа. Каждая ось (child, parent, attribute или self) имеет тип узла участника. Для оси attribute основным типом узла является <attribute>. Для осей parent, child и self основным типом узла является <element>.

ПримечаниеПримечание

Шаблон проверки узла * (например child::*) не поддерживается.

Проверка узла. Пример 1

Путь доступа child::Customer выбирает дочерний элемент <Customer> узла контекста.

В следующем примере элемент child является осью, а Customer является проверкой узла. Тип узла участника для оси child — это <element>. Таким образом, проверка узла возвращает значение TRUE, если узел <Customer> является узлом <element>. Если узел контекста не имеет потомков <Customer>, возвращается пустое множество узлов.

Проверка узла. Пример 2

Путь доступа attribute::CustomerID выбирает атрибут CustomerID узла контекста.

В этом примере элемент attribute является осью, а CustomerID является проверкой узла. Тип узла участника для оси attribute — это <attribute>. Поэтому проверка узла возвращает значение TRUE, если элемент CustomerID является узлом <attribute>. Если узел контекста не содержит элементов CustomerID, возвращается пустое множество узлов.

ПримечаниеПримечание

В данной реализации XPath в случае, если шаги определения расположения данных ссылаются на тип <element> или <attribute>, который не объявлен в схеме, возникает ошибка. Это отличается от реализации XPath в MSXML, где возвращается пустое множество узлов.

Сокращенный синтаксис осей

Поддерживается следующий сокращенный синтаксис пути доступа.

  • attribute:: можно сократить до @.

    Путь доступа Customer[@CustomerID="ALFKI"] аналогичен выражению child::Customer[attribute::CustomerID="ALFKI"].

  • child:: можно исключить из шага определения расположения данных.

    Таким образом, ось child является осью по умолчанию. Путь доступа Customer/Order аналогичен выражению child::Customer/child::Order.

  • self::node() можно сократить до одной точки (.), а parent::node() можно сократить до двух точек (..).