Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППТС-2 / Лекции / Lect4-05.doc
Скачиваний:
6
Добавлен:
12.05.2015
Размер:
645.12 Кб
Скачать

5.1.1.3. ВыраженияXPath

Главной синтаксической конструкцией языка XPath является выражение. Для группировки выражений можно использовать круглые скобки. Приоритеты при выполнении операций в выражениях определяются так же, как в языках программирования. Для изменения приоритета вычисления выражений можно использовать круглые скобки.

В результате обработки выражения XPath получается последовательность узлов и/или атомарные значения.

5.1.1.3.1. Переменные и литералы

Имя переменной– это имя типа QName (см. рис. 5.5.1), перед которым ставится символ "$". В самом языкеXPathпеременные явно не определены, однако они используются в языках XQuery и XSLT.

Булевские литералы (типа xs:boolean) задаются вXPathкакtrueилиfalse. Числовые литералы (типовxs:integer,xs:decimalиxs:doubleи производных типов) задаются как целые числа, либо числа с десятичной точкой, либо числа в формате с плавающей точкой. Строковые литералы (типаxs:stringи производных типов) заключаются либо в двойные, либо в одиночные апострофы.

5.1.1.3.2. Числовые выражения

Числовые выраженияиспользуются для выполнения арифметических операций над числами.

В XPathопределены следующие арифметические операторы:

  • +– сложение;

  • -– вычитание;

  • *– умножение;

  • div– деление;

  • idiv– деление двух целых чисел;

  • mod– взятие модуля (определение остатка от деления чисел).

Арифметические операции могут, кроме idivиmod, могут использоваться и для следующих типов дат и времени:xs:dateTime,xs:date,xs:time,xs:dayTimeDurationиxs:yearMonthDuration. Арифметические операции могут также использоваться со строками, если они содержат числа.

Поскольку символ "-" может использоваться в XML в именах переменных, при записи операции вычитания оператор "-" должен быть отделен от первого операнда (вычитаемого) по крайней мере одним пробелом.

Примеры числовых выражений:

1. 3+2– равно5.

2. 5 div 2– равно2.5.

3. 5 idiv 2– равно2.

4. 5 mod 2– равно1.

5. $a1 - 1– равно текущему значению переменной$a1 минус1.

6. $a1-1– будет воспринято как переменная с именем$a1-1.

7. $a1+$a2*$a3 – равно текущему значению переменной$a2, умноженной на текущее значение$a3плюс текущее значение$a1.

8. $a1*($a2+$a3) – равно сумме текущих значений переменных$a2и$a3умноженной на текущее значение$a1.

9. "2"+"1.2e1" – равно14.

5.1.1.3.3. Выражения отношения

Выражения отношенияиспользуются для сравнения двух значений. Результатом выражения отношения является булевское значениеtrueилиfalse. ВXPathопределены три типа выражений сравнения:

  • сравнение значений;

  • общее сравнение;

  • сравнение узлов.

Сравнение значенийпроизводится для двух одиночных значений и использует следующие операторы отношения:

  • gt– больше;

  • lt– меньше;

  • ge– больше или равно;

  • le– меньше или равно;

  • eq– равно;

  • ne– не равно.

Примеры сравнения значений:

1. 5 gt 3– равноtrue.

2. 5 ne 5– равноfalse.

3. 5 eq 5– равноtrue.

4. 5 ge 5– равноtrue.

При общем сравненииоперанды сначала преобразуются в данные одного типа, а затем сравниваются как при сравнении значений. Если операнды содержат списки, сравнение значений выполняется для каждого элемента списка. Для общего сравнения определены следующие операторы отношения:

  • >– больше;

  • <– меньше;

  • >=– больше или равно;

  • <=– меньше или равно;

  • =– равно;

  • !=– не равно.

Примеры общего сравнения:

1. 5 > 3– равноtrue.

2. (1,2) = (2,3)– равноtrue.

3. (1,2) = (3,4)– равноfalse.

4. (1,2) != (2,3)– равноtrue.

Для сравнения узловопределены следующие операторы:

  • is– проверка узлов-операндов на равенство;

  • <<– проверка на предшествование первого узла-операнда второму узлу-операнду;

  • >>– проверка на предшествование второго узла-операнда первому узлу-операнду.

Примеры сравнения узлов:

1. /book-description/book/publisher [@genre="классика"] is

/book-description/book/publisher[@year="2005"]– равноtrue, если для элементаpublisherзначение атрибутаgenreравно"классика"и значение атрибутаyearравно"2005".

2. /book-description/book/publisher[@year="2005"] <<

/book-description/book/publisher[@year="2006"] – равноtrue, если для элементpublisherсо значением атрибутаyear, равным"2005", предшествует элементуpublisherсо значением атрибутаyear, равным"2006".

Соседние файлы в папке Лекции