Две функции true и false возвращают тождественную 'истину' и тождественную 'ложь' соответственно. В XPath нет констант и, тем более, логических констант, определяющих 'истину' и 'ложь', как в других языках. Функции true и false восполняют эту нехватку.
Примеры:
true() or $var → true
Это выражение всегда будет истинным вне зависимости от значения переменной var, поскольку дизъюнкция (логическая операция 'или') с тождественной 'истиной' всегда будет 'истиной'.
false() and $var → false
Это выражение всегда будет ложным вне зависимости от значения переменной var, поскольку конъюнкция (логическая операция 'и') с тождественной 'ложью' всегда будет 'ложью'.
Функция
Функция lang может использоваться для того, чтобы определить языковой контекст контекстного узла. В элементах XML можно использовать атрибут lang пространства имен xml для определения языка содержимого узла, например;
<text xml:lang='en-gb'>
Yet no living human being have been ever blessed with seeing...
</text>
Пространство имен, соответствующее префиксу xml, не требуется объявлять. Это служебное пространство имен, которое неявно задано во всех XML-документах.
Функция lang возвратит 'истину', если идентификатор языка, который передан ей в виде строкового параметра, соответствует языковому контексту контекстного узла. Это определяется следующим образом.
□ Если ни один из предков контекстного узла не имеет атрибута xml:lang, функция возвращает 'ложь'.
□ Иначе строковый параметр проверяется на соответствие значению атрибута xml:lang ближайшего предка. Если эти значения равны в любом регистре символов, или атрибут начинается как значение параметра функции и имеет суффикс, начинающийся знаком '- ', функция возвращает 'истину'.
□ В противном случае функция возвращает 'ложь'.
Примеры:
Функция lang('en') возвратит 'истину' в контексте любого из следующих элементов:
<body xml:lang='EN'/>
<body xml:lang='en-GB'/>
<body xml:lang='en-us'/>
<body xml:lang='EN-US'/>
Функция lang('de') возвратит 'истину' в контексте элемента b и 'ложь' — в контексте элементов а и с:
<а>
<b xml:lang='de'>
<c xml:lang='en'/>
</b>
</a>
Числовые функции
Функция
Функция number явным образом конвертирует свой аргумент в числовой тип. Если аргумент не указан, функции передается множество узлов, состоящее из единственного контекстного узла. Коротко напомним правила преобразования в числовой тип.
□ Значения булевого типа преобразуются в 0 или 1 следующим образом: 'ложь' преобразуется в 0, 'истина' в 1.
□ Строковое значение преобразуется в число, которое оно представляет.
□ Множество узлов сначала преобразуется в строку, а затем, как строка в число. Фактически численным значением множества узлов является численное значение его первого узла.
□ Объекты других типов преобразуются в число в соответствии с собственными правилами. Например, результирующий фрагмент дерева так же как и множество узлов сначала преобразуется к строке, а затем в численный формат.
number($to_be or not($to_be)) → 1
Значение этого выражения будет 1, поскольку $to_be or not($to_be) будет истинным вне зависимости от значения переменной to_be.
number(false()) → 0
number('00015.0001000') → 15.0001
number('.0001000') → 0.0001
number('1.') → 1
number('-.1') → -0.1
number('-5') → -5
Функция
Функция sum суммирует значения узлов из переданного ей множества. Строковые значения узлов сначала преобразуются в числа, а затем все полученные числа складываются.
<list>
<item>1</item>
<item>3</item>
<item>5</item>
</list>
