Главная » XSLT » Математические операции над числами – Введение

0

В главе 2 мы сетовали на отсутствие развитых средств обработки строк в XSLT 1.0. А уж что касается математических вычислений, XSLT и вовсе ничем не лучше Микки Мауса! В XSLT 1.0 имеются средства для выполнения основных арифме­тических операций, подсчета и суммирования значений и форматирования чисел. Вся остальная математика – на откуп вашей изобретательности. К счастью, как и в случае строк, рекурсия позволяет совершать подвиги на ниве математики с относительно небольшими усилиями.

В XPath/XSLT 2.0 добавлен ряд наиболее очевидных математических функ­ций, в том числе abs(), avg(), max(), min(), round-to-half-even(). Кроме того, появились числовые типы (xs:integer, xs:double и другие типы данных, определенные в спецификации XML Schema), тогда как в XSLT 1.0 единственным числовым типом было число одинарной точности с плавающей точкой. В XPath 2.0 наконец-то распознается научная нотация, отсутствие которой в версии 1.0 вызыва­ло значительные неудобства.

Однако ни для первой, ни для второй версии не надейтесь найти в этой главе рецеп­ты умножения матриц или выполнения быстрого преобразования Фурье. Если вам нужны столь сложные математические вычисления над данными, записанными в фор­мате XML, то язык XSLT не для вас. Лучше импортируйте данные в какой-нибудь язык, более благосклонно относящийся к математике, используя XSLT в качестве конвертера, либо обратитесь к интерфейсу SAX или DOM. Впрочем, на странице «Гале­рея забавных трюков на XSL и XSLT» (http://www.incrementaldevelopment.com/ xsltrick) есть несколько любопытных примеров реализации на XSLT таких задач, как вычис­ление простых чисел или дифференцирование полиномов. Познакомиться с ними поучительно, поскольку это обогатит ваше понимание XSLT. Но в этой главе мы огра­ничимся рецептами, демонстрирующими решение часто встречающихся математичес­ких задач средствами одного лишь XSLT с приемлемой производительностью.

Некоторые примеры, приведенные в начале главы, стоит рассматривать как руководство по применению встроенной в XSLT функциональности. Я включил их, потому что эти средства иногда понимают неправильно.

Многие рассматриваемые рецепты – это реализации функций, определенных в проекте EXSLT. Если на сайте EXSLT.org имеется реализация на чистом XSLT, мы сначала обсудим ее, а потом поговорим об альтернативных решениях1. Реали­зации на чистом XSLT существуют для всех определенных в EXSLT расширений, кроме тригонометрических функций (sin, cos и т.д.). Если вы жить не можете без них, то в рецепте 3.5 упомянуто одно из возможных направлений поиска.

Во многих рецептах этой главы исследуются альтернативные решения. Чита­тели, которых технические подробности не интересуют, могут просто воспользо­ваться примером, приведенном в разделе «Решение», поскольку оно всегда самое лучшее или, по крайней мере, не хуже прочих.

Мангано Сэл  XSLT. Сборник рецептов. – М.: ДМК Пресс, СПБ.: БХВ-Петербург, 2008. – 864 с.: ил.

По теме:

  • Комментарии