Выбрать главу

• должен поддерживать представления чисел с плавающей точкой одинарной и двойной точности, поддерживаемые схемой 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. Не обязательно читать всю главу подряд — скорее ею лучше пользоваться как справочным руководством: здесь перечислены все функции в удобном для просмотра виде.

Функции XSLT

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

• current(). Возвращает текущий (current) узел — но не контекстный узел. Текущий узел — это узел, используемый в данный момент в таких циклах, как <xsclass="underline" for-each>. Функцию current нельзя применять в образцах;

• document(). Позволяет считывать несколько документов;

• element-available(). Показывает, доступен ли элемент расширения;

• format-number(). Форматирует числа при выводе;

• function-available(). Показывает, доступна ли функция расширения;

• generate-id(). Указывает процессору XSLT присвоить идентификатор узлу и возвратить его. При повторном применении generate-id к тому же узлу функция возвращает присвоенный ранее идентификатор;

• key(). Позволяет осуществлять поиск по ключу;

• system-property(). Позволяет проверить три системных свойства: xsclass="underline" version (версия XSLT, поддерживаемая процессором XSLT), xsclass="underline" vendor (производитель процессора XSLT) и xsclass="underline" vendor-url (URL производителя процессора XSLT);

• unparsed-entity-uri(). Предоставляет доступ к неразобранным сущностям, объявленным в DTD или схеме, через URI.

В следующих разделах все эти функции рассматриваются подробно и с примерами.

current()

Функция current возвращает текущий (current) — не контекстный (context) — узел. Контекстный узел шаблона — это узел в выбранном наборе узлов, к которому применяется шаблон. Текущий узел, с другой стороны, это используемый в данный момент узел в таких циклах, как <xsclass="underline" for-each>. Функция возвращает текущий узел как набор узлов с одним узлом: