xsl-list
[Top] [All Lists]

[xsl] EXSLT support report

2007-06-17 13:23:03
Hello

I have xml source like this :

<?xml version="1.0"?>
<!-- modules names, functions names, elements names taken from http://exslt.org -->
<modules>
<module name="dates and times" prefix="date">
  <function name="add"/>
  <function name="add-duration"/>
  <function name="date"/>
  <function name="date-time"/>
  <function name="day-abbrevation"/>
  <function name="day-in-month"/>
  <function name="day-in-week"/>
  <function name="day-in-year"/>
  <function name="day-of-week-in-month"/>
  <function name="difference"/>
  <function name="duration"/>
  <function name="format-date"/>
  <function name="hour-in-day"/>
  <function name="leap-year"/>
  <function name="minute-in-hour"/>
  <function name="month-abbrevation"/>
  <function name="month-in-year"/>
  <function name="month-name"/>
  <function name="parse-date"/>
  <function name="second-in-minute"/>
  <function name="seconds"/>
  <function name="sum"/>
  <function name="time"/>
  <function name="week-in-month"/>
  <function name="week-in-year"/>
  <function name="year"/>
  <element name="date-format"/>
</module>
<module name="dynamic" prefix="dyn">
  <function name="closure"/>
  <function name="evaluate"/>
  <function name="map"/>
  <function name="max"/>
  <function name="min"/>
  <function name="sum"/>
</module>
<module name="common" prefix="exsl">
  <function name="node-set"/>
  <function name="object-type"/>
  <element name="document"/>
</module>
<module name="functions" prefix="func">
  <element name="function" />
  <element name="result" />
  <element name="script" />
</module>
<module name="math" prefix="math">
  <function name="abs"/>
  <function name="acos" />
  <function name="asin" />
  <function name="atan" />
  <function name="atan2" />
  <function name="constant" />
  <function name="cos" />
  <function name="exp" />
  <function name="highest" />
  <function name="log" />
  <function name="lowest" />
  <function name="max" />
  <function name="min" />
  <function name="power" />
  <function name="random" />
  <function name="sin" />
  <function name="sqrt" />
  <function name="tan" />
</module>
<module name="random" prefix="random">
  <function name="random-sequence"/>
</module>
<module name="regular expressions" prefix="regexp">
  <function name="match"/>
  <function name="replace"/>
  <function name="test"/>
</module>
<module name="sets" prefix="set">
  <function name="difference"/>
  <function name="distinct"/>
  <function name="has-same-node"/>
  <function name="intersection"/>
  <function name="leading"/>
  <function name="trailing"/>
</module>
<module name="strings" prefix="str">
  <function name="align"/>
  <function name="concat"/>
  <function name="decode-uri"/>
  <function name="encode-uri"/>
  <function name="padding"/>
  <function name="replace"/>
  <function name="split"/>
  <function name="tokenize"/>
</module>
</modules>

and stylesheet like this:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                             xmlns:date="http://exslt.org/dates-and-times";
              xmlns:dyn="http://exslt.org/dynamic";
              xmlns:exsl="http://exslt.org/common";
              xmlns:func="http://exslt.org/functions";
              xmlns:math="http://exslt.org/math";
              xmlns:random="http://exslt.org/random";
              xmlns:regexp="http://exslt.org/regular-expressions";
              xmlns:set="http://exslt.org/sets";
              xmlns:str="http://exslt.org/strings";
extension-element-prefixes="date dyn exsl func math random regexp set str">

<xsl:output method="xml" encoding="utf-8" indent="yes"/>

<xsl:template match="/">
  <html>
    <head>
      <style type="text/css">
      .true {
        color: green;
      }
      .false {
        color: red;
      }
      table {
        margin: 1em;
        border: #999999 solid 1px;
        border-spacing: 1px;
      }
      td {
        padding: .1em .5em;
        background: #eeeeee;
      }
      th {
        padding: .1em .5em;
        background: #bbbbbb;
        text-align: left;
      }
      caption {
        text-align: left;
        font-weight: bold;
      }
      </style>
    </head>
    <body>
<h1>EXSLT support report for "<a href="{system-property('xsl:vendor-url')}"><xsl:value-of select="system-property('xsl:vendor')" /></a>"</h1>
      <hr />
      <xsl:apply-templates select="modules/module"/>
    </body>
  </html>
</xsl:template>

<xsl:template match="module">
  <h2>module <xsl:value-of select="@name"/></h2>

  <xsl:if test="function">
    <table>
      <caption>Functions</caption>
      <tr>
        <xsl:apply-templates select="function" mode="labels"/>
      </tr>
      <tr>
        <xsl:apply-templates select="function" mode="values"/>
      </tr>
    </table>
  </xsl:if>

  <xsl:if test="element">
    <table>
      <caption>Elements</caption>
      <tr>
        <xsl:apply-templates select="element" mode="labels"/>
      </tr>
      <tr>
        <xsl:apply-templates select="element" mode="values"/>
      </tr>
    </table>
  </xsl:if>      <hr/>
</xsl:template>

<xsl:template match="function | element" mode="labels">
  <th>
    <xsl:value-of select="@name"/>
  </th>
</xsl:template>

<xsl:template match="function" mode="values">
  <td class="{function-available(concat(../@prefix, ':', @name))}">
<xsl:value-of select="function-available(concat(../@prefix, ':', @name))"/>
  </td>
</xsl:template>

<xsl:template match="element" mode="values">
  <td class="{element-available(concat(../@prefix, ':', @name))}">
<xsl:value-of select="element-available(concat(../@prefix, ':', @name))"/>
  </td>
</xsl:template>

</xsl:stylesheet>

The purpose of the stylesheet is to produce EXSLT support report for XSLT processor which process it. I hope it can be usefull for anyone especially begginers like me to have a such overview of supported EXSLT features. 1.) I process this stylesheet by SAXON 6.5.5, SAXON 8.7.3, xsltproc (libxslt 10119), MSXML with no problems, but XALAN-J 2.5.2 throws error (i guess it's because function-available() ). 2.) I've noticed, the libxslt does not support func:function what do you think about that.

Thank you.

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>