Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППТС-2 / Лекции / Lect4-08.doc
Скачиваний:
5
Добавлен:
12.05.2015
Размер:
422.91 Кб
Скачать

5.3.20.2. Инициатива exslt

Как показывает практика, за­дачи, которые приходится решать при помощи расширений, как правило, совершенно стандартны, например работа с датами. Для того, чтобы избежать дублирования общих проблем, была создана так называемая инициатива EXSLT (ExtendedXSLT).

В рамках EXSLT создаются стандартные библиотеки расширений XSLT для различных процессоров. Кроме того, EXSLT активно поддерживается многими разработчиками процессоров XSLT с тем, чтобы обеспечить переносимость преобразований, использующих расширения EXSLT.

Библиотеки расшире­ний EXSLT можно загрузить с сайта http://www.exslt.org.

На данном этапе разработанные в рамках EXSLTбиблиотеки включают в себя следующие модули:

  • Common– общие функции и элементы расширения (включает функцииexslt:node-setиexslt:object-typeи элементexslt:document).

  • Math– математические функции.

  • sets– функции для работы с множествами узлов (пересечение, разность и т.д.);

  • Functions– элементы для определения пользовательских функций;

  • Dates and Times– элементы и функции для работы с временными параметрами;

  • Strings– модуль для работы со строками;

  • Regular Expressions– функции для работы с регулярными выражениями.

EXSLT покрывает большинство стандартных задач расширений и, кроме того, библиоте­ки EXSLT могут послужить хорошим примером программирования расши­рений.

5.3.20.3. Средства расширения в процессореMsxml

В процессоре MSXMLопределен единственный элемент расширения верхнего уровняmsxsl:script, используемый для объявления переменных и создания пользовательских функций. Этот элемент имеет следующий синтаксис:

<msxsl:script

language = "имя-языка"

implements-prefix = "префикс-пространства-имен">

<!-- Функция языка сценариев -->

</msxsl:script>.

Атрибут languageзадает используемый язык сценариев (по умолчанию, языкJScript), а атрибутimplements-prefixзадает префикс пространства имен для создаваемых переменных или функций.

Пример использования элемента msxsl:script:

В следующем преобразовании используется пользовательская функция isImage(), которая возвращаетtrue, если в элементеfromдокументаmessage.xmlзадано два атрибута (т.е. задан атрибутimage) иfalse– в противном случае:

<?xml version="1.0" encoding="Windows-1251"?>

<xsl:stylesheet version="1.0"

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

xmlns:msxsl="urn:schemas-microsoft-com:xslt"

xmlns:user="http://mycompany.com/mynamespace">

<xsl:output method="text" encoding="Windows-1251"/>

<msxsl:script language="JScript"

implements-prefix="user">

function isImage(nodelist) {

attributesNumber = nodelist(0).attributes.length;

if(attributesNumber > 1)

return true;

else

return false;

}

</msxsl:script>

<xsl:template match="//header">

<xsl:apply-templates select="from"/>

</xsl:template>

<xsl:template match="from">

<xsl:text> Сообщение </xsl:text>

<xsl:number count="header"/>

<xsl:text>. От: </xsl:text>

<xsl:value-of select="@address"/>

<xsl:if test="user:isImage(.)">

<xsl:text> (с изображением)</xsl:text>

</xsl:if>

</xsl:template>

<xsl:template match="text()">

<xsl:apply-templates/>

</xsl:template>

</xsl:stylesheet>.

В результате выполнения этого преобразования в MSXMLбудет выведен следующий текст:

Сообщение 1. От: ivanov@mail.com (с изображением)

Сообщение 2. От: ivanov@mail.com.

Соседние файлы в папке Лекции