• должен реализовывать условную операцию, оперирующую тремя выражениями — выражением 1 (логическая операция), выражением 2 и выражением 3. Если выражение 1 принимает значение «истина», должно вычисляться выражение 2, а если выражение 1 принимает значение «ложь», должно вычисляться выражение 3;
• должен определять последовательный синтаксис для подвыражений, обрабатывающих коллекции элементов;
• должен поддерживать дополнительные строковые функции. Например, W3C рассматривает вопрос добавления средств для замены в строках, заполнения символами и преобразований регистра;
• должен поддерживать функции агрегации при применении к коллекциям. Например, некоторым пользователям XPath 1.0 требовалось применить такую функцию агрегации, как sum
, к значениям выражений, примененных к наборам узлов;
• должен поддерживать регулярные выражения для поиска в строках с использованием нотации регулярных выражений, установленной в схеме XML;
• должен поддерживать элементарные типы данных схемы XML. То есть в дополнение к типам, поддерживаемым моделью данных XPath 1.0, — строке, числу, логическому значению и набору узлов — модель данных XPath 2.0 должна поддерживать элементарные типы данных схемы XML;
• должен поддерживать представления чисел с плавающей точкой одинарной и двойной точности, поддерживаемые схемой XML, которая использует научную нотацию;
• должен определять подходящий набор функций для работы пользователя с элементарными типами данных схемы XML;
• должен добавлять в XPath тип данных «список» (поскольку схема XML позволяет определять простые типы, унаследованные от списка);
• должен поддерживать доступ к значениям простых типов элементов и атрибутов. Поскольку схемы XML представляют много новых типов, XPath 2.0 должен поддерживать доступ к собственному, простого типа, значению элемента или атрибута;
• должен определять поведение операторов для нулевых аргументов;
• должен иметь средства для выбора элементов или атрибутов на основе явного типа схемы XML;
• должен иметь средства для выбора элементов или атрибутов на основе иерархии типов схемы XML;
• должен иметь средства для выбора элементов на основе групп подстановки схемы XML;
• должен поддерживать средства поиска, основанные на уникальных ограничениях и ключах схемы.
Хотя мы подошли к концу главы, о XPath сказано еще не все. Тема будет продолжена в следующей главе, в которой мы более внимательно рассмотрим доступные в XPath функции и функции, уже встроенные в XSLT.
Глава 8
Работа с функциями XSLT и XPath
В этой главе мы изучим доступные вам в XSLT функции — как встроенные в XSLT, так и функции XPath. Вы уже встречались с этими функциями выборочно (например, с id
, generate-id
, position
, count
и т.д). В этой главе мы рассмотрим их все.
Некоторые функции входят в XSLT, некоторые пришли из XPath. И XSLT, и XPath обновляются до версии 2.0, и в конце главы я приведу список новых, готовящихся к выпуску функций. (Пока что никаких новых функций версии 2.0 еще не опубликовано.)
В XSLT встроены следующие функции:
• element-available()
;
• function-available()
;
• current()
;
• document()
;
• key()
;
• format-number()
;
• generate-id()
;
• system-property()
;
• unparsed-entity-uri()
.
Вы также можете пользоваться многими функциями XPath. Я сгруппирую их по типам данных XPath, с которыми они работают. Существует четыре типа данных: наборы узлов, строки, числа и логические значения. С наборами узлов работают следующие функции XPath:
• count()
;
• id()
;
• last()
;
• local-name()
;
• name()
;
• namespace-uri()
;
• position()
.
Следующие функции XPath работают со строками:
• concat()
;
• contains()
;
• normalize-space()
;
• starts-with()
;
• string()
;
• string-length()
;
• substring()
;
• substring-after()
;
• substring-before()
;
• translate()
.
Для работы с числами служат следующие функции XPath:
• ceiling()
;
• floor()
;
• number()
;
• round()
;
• sum()
.
И эти функции XPath работают с логическими значениями:
• boolean()
;
• false()
;
• lang()
;
• not()
;
• true()
.
В этой главе мы познакомимся с работой всех вышеназванных функций, а начнем с функций, встроенных в XSLT. Не обязательно читать всю главу подряд — скорее ею лучше пользоваться как справочным руководством: здесь перечислены все функции в удобном для просмотра виде.
Читать дальше