Главная » XSLT » Даты и время – Введение

0

В самом языке XSLT 1.0 нет понятия времени. Однако дата и время – немало­важный аспект повседневной жизни. Необходимость манипулировать ими возни­кает в программах очень часто, особенно при разработке для Web. Поэтому так странно и печально, что в XSLT 1.0 не встроена поддержка для работы с ними.

В версии 2.0 ситуация изменилась к лучшему. В XPath 2.0 включены много­численные функции для манипулирования датами, временем и временными ин­тервалами. В общем, единственное, чего можно было бы пожелать, – это чтобы функции имели не такие длинные имена! Мне говорили, что имена вроде subtract-dates-yielding-yearMonthDuration() были введены отчасти для того, чтобы умиротворить разработчиков языка XQuery. Совместное исполь­зование двух стилей записи имен – с черточкой-разделителем и заглавными бук­вами в начале слова – объясняется тем, что комитеты по разработке XPath и XML Schema приняли различные соглашения.

Примеры в этой главе показывают, как можно компенсировать отсутствие поддержки даты и времени в XSLT 1.0. К сожалению, невозможно реализовать одну из самых важных функций – получение текущей даты и времени. Для этого при­дется обратиться к какому-нибудь другому языку, в котором реализовано взаимодей­ствие с аппаратным таймером. Такой механизм имеется и в Java, и в JavaScript. Если же вам нужно лишь отформатировать дату или время, которые уже имеются в доку­менте, то приведенные ниже шаблоны позволят решить большинство возникаю­щих задач. В версии 2.0 имеются функции current-date(), current-time() и current-dateTime().

Манипуляции с датами и временем без поддержки со стороны языка – дело непростое, но в общем-то сводится к арифметическим операциям над целыми чис­лами и, главным образом, к преобразованиям из одной системы счисления в дру­гую. Для обращения с календарями, отличными от григорианского, нужно еще обладать знаниями из области истории, религии и культуры. Читатели, которым процедуры манипулирования датой и временем без надобности, могут спокойно пропустить эту главу, так как в ней почти нет новых приемов работы с XSLT. Тем же, кому интересны теоретические основы вычислений, стоит обратиться к источ­никам, упомянутым в разделе «См. также» ниже.

Я благодарен Джейсону Даймонду (Jason Diamond), который любезно предос­тавил многие шаблоны, относящиеся к григорианскому календарю. Код для дру­гих календарей – это перевод на XSLT открытой реализации, написанной Эдвар­дом М. Рейнгольдом (Edward M. Reingold) на языке Lisp. Некоторые алгоритмы были изменены, чтобы лучше соответствовать структуре XSLT и коду Джейсона, положенному в основание всей библиотеки.

Пусть вас не пугает способ передачи даты в большинство шаблонов. Он выб­ран для удобства. Дату можно передать двумя путями: в виде строки, форматиро­ванной согласно правилам ISO для представления даты и времени, либо в виде отдельных компонентов, соответствующих году, месяцу и дню. Оба варианта про­демонстрированы ниже:

<xsl:call-template name="ckbk:calculate-day-of-the-week">

<xsl:with-param name="date-time" select="’2002-01-01T01:00:00’"/> </xsl:call-template>

<xsl:call-template name="ckbk:calculate-day-of-the-week">

<xsl:with-param name="date" select="’2 002-01-01’"/> </xsl:call-template>

<xsl:call-template name="ckbk:calculate-day-of-the-week"> <xsl:with-param name="year" select="2 0 02"/> <xsl:with-param name="month" select="01"/> <xsl:with-param name="day" select="01"/> </xsl:call-template>

Во всех случаях вычисляется день недели, на который приходится дата 1 ян­варя 2002 года. Первые два способа удобны, если дата уже представлена в форма­те ISO, а последний – если дата хранится в виде отдельных компонентов. Можно также переопределить части ISO-представления:

<xsl:call-template name="ckbk:calculate-day-of-the-week"> <xsl:with-param name="date" select="’2 002-01-01’"/> <xsl:with-param name="day" select="25"/> </xsl:call-template>

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

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

По теме:

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