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

на главную - закладки

Жанры

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

Шрифт:

• должны быть разрешены как встроенные реализации функций расширения, так и внешние;

• в функции расширения должно быть возможно передавать аргументы всех типов данных XPath;

• функции расширения должны иметь возможность возвращать в качестве результата все типы данных XPath;

• функции расширения должны иметь возможность создавать и возвращать наборы узлов фрагментов XML;

• должна иметься возможность включать или импортировать функции расширения из другой таблицы стилей;

• при неоднозначности выбора реализации функции расширения процессор должен выдать ошибку и прекратить работу;

• процессор

должен преобразовывать аргументы способом, согласованным со встроенными функциями;

• функции расширения должны быть способны вернуть объект любого типа основного языка;

• должна существовать возможность передать в функцию расширения объект любого типа основного языка.

Вплоть до недавнего времени процессоры XSLT полностью самостоятельно определяли способ реализации функций расширения. Например, в Saxon и Xalan существует возможность непосредственно выполнять код Java, если определить пространство имен, задающее класс Java в качестве последней части URI. Я поступил так в следующем случае, определив пространство имен

Date
, соответствующее классу Java
Date
:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl=http://www.w3.org/1999/XSL/Transform

 xmlns:Date="http://www.saxon.com/java/java.util.Date">

 .

 .

 .

После этого я могу воспользоваться такими функциями класса

Date
Java, как
toString
и
new
, для того чтобы заключить текущую дату в элементы заголовка
<Н1>
HTML в выходном документе (листинг 5.14).

Листинг 5.14. Применение функций Date Java

<?xml version="1.0"?>

<xsl:stylesheel version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 xmlns:Date="http://www.saxon.com/java/java.util.Date">

 <xsl:template match="/PLANETS">

<HTML>

<HEAD>

<TITLE>

The Planets Table

</TITLE>

</HEAD>

<BODY>

<H1>

The Planets Table

</H1>

<BR/>

<H1>

<xsl:value-of select="Date:toString(Date:new)"/>

</H1>

<TABLE BORDER="2">

<TD>Name</TD>

<TD>Mass</TD>

<TD>Radius</TD>

<TD>Day</TD>

<xsl:apply-templates/>

</TABLE>

</BODY>

</HTML>

 </xsl:template>

 <xsl:template match="PLANET">

<TR>

<TD><xsl:value-of select="NAME"/></TD>

<TD><xsl:apply-templates select="MASS"/></TD>

<TD><xsl:apply-templates select="RADIUS"/></TD>

<TD><xsl:applу-templates select="DAY"/></TD>

</TR>

 </xsl:template>

 <xsl:template match="MASS">

<xsl:value-of select="."/>

 </xsl:template>

 <xsl:template match="RADIUS">

<xsl:value-of select="."/>

 </xsl:template>

 <xsl:template match="DAY">

<xsl:value-of select="."/>

 </xsl:template>

</xsl:stylesheet>

Результат

применения этой функции приведён на рис. 5.3.

Рис. 5.3. Применение функции расширения 

Вот работоспособная схема и заодно веский повод включить Java в XSLT. Тем не менее, в XSLT 1.1 был представлен элемент

<xsl:script>
, который, по всей видимости, будет включен и в XSLT 2.0.

Элемент <xsl:script>

Элемент

<xsl:script>
был определен в рабочем проекте XSLT 1.1, он предоставляет хорошо определенный способ связи функций расширения с таблицами стилей XSLT. Это элемент верхнего уровня, обладающий следующими атрибутами:

• 

implements-prefix
(необязательный). Задает имя пространства имен функции расширения, которую реализует этот элемент. Принимает значение
NCNAME
;

• 

language
(необязательный). Задает язык, используемый функцией расширения. Устанавливается в «
ecmascript
» (стандарт JavaScript), «
javascript
», «
java
» или QNAME, не являющееся NCNAME;

• 

src
(необязательный). Предоставляет URI, в котором реализована функция расширения. Например, это может быть класс Java;

Поделиться:
Популярные книги

Товарищ "Чума" 2

lanpirot
2. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 2

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

И.Бабель. Воспоминания современников

Паустовский Константин Георгиевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
И.Бабель. Воспоминания современников

Наномашины, наследник! Том 9

Новиков Николай Васильевич
9. Первый среди карапузов
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наномашины, наследник! Том 9

Газлайтер. Том 1

Володин Григорий
1. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 1

Закрытые Миры

Муравьёв Константин Николаевич
Вселенная EVE Online
Фантастика:
фэнтези
5.86
рейтинг книги
Закрытые Миры

Неучтенный элемент. Том 2

NikL
2. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 2

Законы Рода. Том 8

Мельник Андрей
8. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 8

Кодекс Крови. Книга ХVIII

Борзых М.
18. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVIII

Гримуар темного лорда VI

Грехов Тимофей
6. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VI

Долг

Кораблев Родион
7. Другая сторона
Фантастика:
боевая фантастика
5.56
рейтинг книги
Долг

Хозяин Стужи 2

Петров Максим Николаевич
2. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
5.75
рейтинг книги
Хозяин Стужи 2

Четники. Королевская армия

Тимофеев Алексей Юрьевич
Документальная литература:
биографии и мемуары
публицистика
5.00
рейтинг книги
Четники. Королевская армия