Чтение онлайн

ЖАНРЫ

Холзнер Стивен

Шрифт:

• должен определять подходящий набор функций для работы пользователя с элементарными типами данных схемы 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) узел — но не контекстный узел. Текущий узел — это узел, используемый в данный момент в таких циклах, как
<xsl:for-each>
. Функцию current нельзя применять в образцах;

• 

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

• 

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

• 

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

• 

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

• 

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

• 

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

• 

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

• 

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

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

current

Функция

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

node-set current

Обратите внимание:

current
нельзя применять в образцах, поскольку образцы должны быть независимы от пути обработки, а способы реализации таких структур, как циклы, в процессорах XSLT могут различаться.

Следующий пример, в котором я выбираю элементы

<PLANET>
при помощи шаблона (листинг 8.1), демонстрирует работу функции
current
. Внутрь шаблона я поместил элемент
<xsl:for-each>
, и шаблон применяется только в том случае, если выбранный шаблоном контекстный узел в то же время является и текущим узлом в очередной итерации в элементе
<xsl:for-each>
.

Листинг 8.1. Применение функции current

<?xml version="1.0"?>

Поделиться с друзьями: