□ узел пространства имен 'urn:b'
;
□ атрибут level
;
□ текстовый узел 'alpha
';
□ узел элемента b:bravo
;
□ узел пространства имен 'urn:а'
;
□ узел пространства имен 'urn:b
';
□ комментарий с текстом 'To do ...
';
□ элемент charlie
;
□ узел пространства имен 'urn:а'
;
□ узел пространства имен 'urn:b'
;
□ текстовый узел 'delta
';
□ узел инструкции по обработке <?арр close?>
.
Рис. 3.11. Схема дерева XML-документа
Соответственно, обратный порядок просмотра документа будет начинаться с инструкции по обработке <?app close?>
и заканчиваться корневым элементом.
Типы данных
Многие языки программирования при объявлении переменной требуют указывать, какой тип данных будет ей присваиваться. Например, в языке Java код
int i = 15;
объявит переменную целого типа int
с именем i
и присвоит ей значение 15
. В этом случае тип данных ставится в соответствие переменной. XSLT относится к динамически типизируемым языкам, в которых тип данных ассоциируется не с переменными, а со значениями.
В XSLT выделяется пять типов данных:
□ булевый тип (boolean);
□ численный тип (number);
□ строковый тип (string);
□ множество узлов (node-set);
□ результирующий фрагмент дерева (result tree fragment).
Ниже мы подробно рассмотрим особенности работы со всеми пятью типами данных.
Булевый тип (boolean)
Булевый тип данных в XSLT может принимать два значения — true
('истина') и false
('ложь'). В XSLT нет констант для выражения тождественной 'истины' или 'лжи', как во многих других языках программирования, для этих целей следует использовать функции true
и false
.
Значение булевого типа могут быть получены путем сравнения других типов данных при помощи операторов сравнения (таких как '=
', '>
', '<
') или как результат вычисления более сложных логических выражений с использованием операторов 'and
', 'or
' и функции not
.
Булевый тип может быть неявно преобразован в число (0
для false
и 1
для true
) или в строку ('false'
и 'true'
соответственно).
Примеры:
1=2
→ 0 (число)
not((2>1) and (2>3))
→ 'true' (строка)
Численный тип (number)
Численный тип в XSLT определяется как 64-битное значение с плавающей точкой, двойной точности, соответствующее стандарту IEEE 754-1985. Этот стандарт используется во многих других языках программирования, и потому можно сказать, что арифметика в XSLT работает 'как обычно'. Вместе с тем, стандарт IEEE 754 имеет свои нюансы, которые обязательно надо учитывать в практике программирования на XSLT.
Согласно строгому определению, числа в XSLT имеют форму s
×m
×2x
, где s
— знак числа, m
— его мантисса, а x
— экспонента. Эти числа имеют следующие значения:
□ знак (s
) равен +1
для положительных чисел и - 1
для отрицательных;
□ мантисса (m
) — это положительное целое число в интервале от 0
до 253-1
включительно;
□ экспонента (x
) — это целое число в интервале от -1075
до 970
включительно.
Таким образом, числа в XSLT находятся в интервале приблизительно от - 10317
до 10317
.
Кроме этого выделяются пять особых значений.
□ Отрицательная бесконечность. Это значение представляет отрицательные числа, меньшие, чем -10317
; оно соответствует математическому значению -∞. Отрицательная бесконечность может быть результатом таких операций, как деление отрицательного числа на нуль или умножение двух очень больших (в абсолютном значении) чисел разного знака в случае, когда для записи их произведения не хватит 64 бит.
□ Положительная бесконечность. Это значение представляет очень большие положительные числа, превосходящие 10317
; оно соответствует математическому значению ∞. Положительная бесконечность может быть результатом таких операций, как деление положительного числа на нуль или умножение двух очень больших (в абсолютном значении) чисел одного знака в случае, когда для записи их произведения не хватит 64 бит.
□ Отрицательный нуль. Это значение соответствует значению предела -1/x
при x
, стремящемся к бесконечности. Отрицательный нуль может быть результатом таких операций, как деление отрицательного числа на бесконечность или положительного числа на отрицательную бесконечность. Отрицательный нуль может также быть получен путем деления отрицательного числа на очень большое положительное число, или, наоборот, в случае, когда для записи частного не хватает 64-битной точности.
□ Положительный нуль (предел 1/x
при x
, стремящемся к бесконечности). Результат таких операций, как вычитание числа из самого себя, деление положительного числа на положительную бесконечность или отрицательного — на отрицательную бесконечность. Положительный нуль может также быть частным деления двух чисел одного знака, если для записи