
- •Лекция 4-08
- •5.3.9. Создание текстовых узлов вXslt
- •5.3.9.1. Элементxsl:text
- •5.3.9.2. Элементxsl:value-of
- •5.3.9.3. Встроенные правила шаблона
- •1. Поздравление
- •2. Напоминание
- •5.3.9.4. Обработка пробельных символов
- •5.3.10. Создание узлов документа, комментариев, инструкций по обработке и пространства имен вXslt
- •5.3.10.1. Элемент xsl:document
- •5.3.10.2. Элементxsl:result-document
- •5.3.10.3. Элементxsl:comment
- •5.3.10.4. Элемент xsl:processing-instruction
- •5.3.10.5. Элементxsl:namespace
- •5.3.11. Копирование узлов вXslt
- •5.3.11.1. Элементxsl:copy
- •5.3.11.2. Элементxsl:copy-of
- •5.3.11.3. Элементxsl:sequence
- •5.3.12. Условная и циклическая обработка вXslt
- •5.3.12.1. Элементxsl:if
- •5.3.12.2. Элементы xsl:choose, xsl:when и xsl:otherwise
- •5.3.12.3. Элементxsl:for-each
- •5.3.12.4. Сортировка вXslt
- •5.3.13. Сообщения процессораXslt
- •5.3.14. Псевдонимы пространства имен вXslt
- •5.3.15. Нумерация вXslt
- •3. Поздравление
- •1. Поздравление
- •1. Поздравление
- •01). Поздравление
- •0:00:00:00:01)Поздравление
- •5.3.16. Форматирование чисел в xslt
- •5.3.17. Использование ключей вXslt
- •5.3.18. Переменные, параметры и функции вXslt
- •5.3.18.1. Переменные в xslt
- •5.3.18.2. Вызов именованных правил шаблона
- •5.3.18.3. Параметры в xslt
- •5.3.18.4. Функции стилей в xslt
- •5.3.19. Дополнительные функции xslt
- •5.3.19.1. Функцияdocument()
- •5.3.19.2. Функцияcurrent()
- •5.3.19.3. Функцияgenerate-id()
- •5.3.19.4. Функция system-property()
- •5.3.19.5. Функцияunparsed-entity-uri()
- •5.3.20 Использование расширений вXslt
- •5.3.20.1. Средства расширенияXslt
- •5.3.20.2. Инициатива exslt
- •5.3.20.3. Средства расширения в процессореMsxml
- •5.3.20.4. Средства расширения в процессореSaxon
5.3.20.4. Средства расширения в процессореSaxon
В процессоре Saxonопределено большое количество функций и элементов расширения. Кроме того, в некоторые элементыXSLTдобавлены новые атрибуты.
В процессоре Saxonдобавлены следующие функции расширения:
функции, выполняющие операции с наборами узлов: after(), before(), closure(), difference(), distinct(), highest(), intersection(), leading(), line-number(), lowest(), node-set(), range();
математические функции: eval(), evaluate(), expression(), max(), min(), sum();
булевские функции: exists(), for-all(), has-same-nodes(), if(), if-null();
строковые функции: path()иtokenize();
функции для работы с пользовательскими данными: get-user-data()иset-user-data();
функция get-pseudo-attribute()для инструкций по обработке;
функция systemId()для сущностей.
Кроме того, процессор Saxonподдерживает функции модулейCommon,Math,Sets,DatesAndTimesиFunctionsбиблиотекиEXSLT.
Элементы расширения процессора Saxonобеспечивают следующие возможности:
изменение значения присвоенной переменной (элемент saxon:assignи дополнительный атрибутsaxon:assignable в элементе xsl:variable);
генерацию DTD в выходном документе (элементы dtd:doctype, dtd:element, dtd:attlist, dtd:attribute, dtd:entity и dtd:notation);
вставку ссылки на сущность в выходном документе (элемент entity-ref);
задания функций XSLT для преобразований (элементы saxon:function и saxon:return);
операции итерации над узлами (элементы saxon:group , saxon:item и saxon:while);
выполнение шаблонных правил, написанных на языке Java (элемент saxon:handler);
формирование нескольких выходных документов (элементы saxon:outputиxsl:document);
просмотр больших документов по частям (поддеревьям) (элемент saxon:preview);
выполнение пользовательских функций расширения на языке Java(элементsaxon:scriptиxsl:script).
В некоторые элементы XSLTвключены следующие дополнительные атрибуты:
атрибут saxon:trace для разрешения или запрещения трассировки выполнения шаблонных правил (для элементовxsl:stylesheetиxsl:template);
атрибут saxon:allow-avt для разрешения или запрещения использования в атрибутеnameзначения шаблона имени атрибута (для элементаxsl:call-template);
атрибут saxon:disable-output-escaping для разрешения или запрещения вывода специальных символов в значении атрибута (для элементаxsl:attribute).
Для элементов xsl:outputиxsl:documentв значениях атрибутаmethodможно использовать следующие дополнительные значения:
значение "fop"в процессорXSLApacheFOP;
значение "xhtml" для вывода документа в форматеXHTML;
полное имя класса, реализующего интерфейс SAX2 org.xml.sax.ContentHandler, или подкласса классаcom.icl.saxon.output.Emitter для направления вывода в этот класс.
Кроме того, если значение атрибутаmethodравно"fop", то можно задать два дополнительных атрибута:fop:renderer, определяющего имя класса FOPRendererиfop:configuration, определяющего имя файла конфигурации пользователя в FOP.
Для элементов xsl:outputиxsl:documentтакже определены следующие дополнительные атрибуты:
атрибут saxon:indent-spacesопределяет количество отступов (пробелов) для каждого уровня в выходных документахXMLиHTML;
атрибут saxon:character-representationдля управления выводом в выходном документе символов, не являющихся символамиASCII;
атрибут saxon:omit-meta-tagзапрещает или разрешает вывод дескриптора<meta>в выходном документеHTML;
атрибут saxon:next-in-chainнаправляет вывод в другой документ.
В процессоре Saxonможно также использовать методы классов библиотекиJava.
Статические методы (методы класса) можно вызывать прямо по их имени, определив для них пространство имен в виде "java:полное-имя-класса" в том же элементе, где используется этот метод или в элементе верхнего уровня, например:
<xsl:value-of select="math:sqrt($arg)"
xmlns:math="java:java.lang.Math"/>.
Если используются методы объекта, предварительно генерируется объект этого класса с помощью метода new(список-аргументов), а затем к нему применяется необходимый метод. Так, следующие фрагменты кода:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="java:java.util.Date">
…
<p><xsl:value-of
select="date:toString(date:new())"/></p>
сначала создает объект класса Dateдля текущих даты и времени, используя конструктор без параметров, а затем преобразует созданный объект в строку.
И, наконец, в процессоре Saxonможно создавать собственные элементы расширения.
Файл: