Предикаты

При выборе узлов каждый шаг выборки может иметь один или несколько предикатов, которые будут фильтровать выбираемый набор узлов. Пре­дикат – это выражение одного из приведенных выше типов, результатом вычисления которого является булевское значение true или false. Это выражение вычисляется для каждого узла выделенного набора, и только в том случае, если результатом является true, узел остается в результирующем наборе.

Фильтрация набора узлов выполняется следующим образом:

· Фильтруемое множество сортируется в направлении просмотра оси на­вигации данного шага. Для осей ancestor, ancestor-or-self, preceding, preceding-sibling фильтруемое множество сортируется в обратном по­рядке просмотра документа, для остальных осей – в прямом порядке просмотра.

· Выражение предиката вычисляется для каждого узла отсортированного множества в следующем контексте:

• Фильтруемый узел (тот, для которого в данный момент вычисляется предикат) становится контекстным узлом.

• Количество узлов фильтруемого множества становится размером контекста.

• Позиция фильтруемого узла в отсортированном множестве становится позицией контекста.

· Результат вычисления предиката преобразуется в булевский тип согласно следующим правилам:

• Если результатом вычисления является число, равное позиции контекста, булевым значением предиката будет true, в противном слу­чае – false. Например, предикат [2] равносилен предикату [position()=2] – он обратится в истину только для второго узла фильтруемого множества.

• Все остальные типы данных приводятся к булевому типу в соответст­вии с приведенными выше правилами.

· Из фильтруемого множества исключаются все узлы, булевское значение предиката для которых было false.

· В случае, если в шаге выборки было несколько предикатов, процедура фильтрации повторяется с каждым из них, оставляя в отфильтрованном множестве только те узлы, для которых каждый из предикатов будет ис­тиной.

Таким образом, предикаты определяют свойства, которыми должны обла­дать выбираемые узлы.

 

Примеры использования предикатов:

1. child::header[position()=1] – выбирает первый дочерний элемент header контекстного узла.

2. child::header[position()=last()] – выбирает последний дочерний элемент header контекстного узла.

3. child::header[position()=last()-1] – выбирает все, кроме последнего, дочерние элементы header контекстного узла.

4. child::address[attribute::value="ivanov@mail.com"] – выбирает все дочерние элементы address контекстного узла, которые имеют атрибут value со значением "ivanov@mail.com".

5. child::address[attribute::value="ivanov@mail.com" or

attribute::value="sidorov@mail.com"] – выбирает все дочерние элементы address контекстного узла, которые имеют атрибут value либо со значением "ivanov@mail.com", либо со значением "sidorov@mail.com".








Дата добавления: 2015-03-19; просмотров: 547;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.