XSLT Transformation of PDI jobs and trans files

Format of KTR and KJB files

empty ktr file
<?xml version="1.0" encoding="UTF-8"?>
<transformation>
  <info>
    <name>Transformation 1</name>
    <description/>
    <extended_description/>
    <trans_version/>
    <directory>&#47;</directory>
    <parameters>
    </parameters>
    <log>
      <read/>
      <write/>
      <input/>
      <output/>
      <update/>
      <rejected/>
      <connection/>
      <table/>
      <step_performance_table/>
      <use_batchid>Y</use_batchid>
      <use_logfield>N</use_logfield>
      <size_limit_lines/>
    </log>
    <maxdate>
      <connection/>
      <table/>
      <field/>
      <offset>0.0</offset>
      <maxdiff>0.0</maxdiff>
    </maxdate>
    <size_rowset>10000</size_rowset>
    <sleep_time_empty>50</sleep_time_empty>
    <sleep_time_full>50</sleep_time_full>
    <unique_connections>N</unique_connections>
    <feedback_shown>Y</feedback_shown>
    <feedback_size>50000</feedback_size>
    <using_thread_priorities>Y</using_thread_priorities>
    <shared_objects_file/>
    <capture_step_performance>N</capture_step_performance>
    <step_performance_capturing_delay>1000</step_performance_capturing_delay>
    <dependencies>
    </dependencies>
    <partitionschemas>
    </partitionschemas>
    <slaveservers>
    </slaveservers>
    <clusterschemas>
    </clusterschemas>
  <modified_user>-</modified_user>
  <modified_date>2010&#47;08&#47;24 11:58:23.312</modified_date>
  </info>
  <notepads>
  </notepads>
  <order>
  </order>
  <step_error_handling>
  </step_error_handling>
   <slave-step-copy-partition-distribution>
</slave-step-copy-partition-distribution>
   <slave_transformation>N</slave_transformation>
</transformation>
empty kjb file
<?xml version="1.0" encoding="UTF-8"?>
<job>
  <name>empty</name>
    <description/>
    <extended_description/>
    <job_version/>
  <directory>&#47;</directory>
  <created_user>-</created_user>
  <created_date>2010&#47;08&#47;24 12:09:26.750</created_date>
  <modified_user>-</modified_user>
  <modified_date>2010&#47;08&#47;24 12:09:26.750</modified_date>
    <parameters>
    </parameters>
    <slaveservers>
    </slaveservers>
  <logconnection/>
  <logtable/>
  <size_limit_lines/>
   <use_batchid>Y</use_batchid>
   <pass_batchid>N</pass_batchid>
   <use_logfield>Y</use_logfield>
   <shared_objects_file/>
  <entries>
  </entries>
  <hops>
  </hops>
  <notepads>
  </notepads>
</job>

XSLT transformation script

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<!--

This xslt transform dynamically transforms ktr and kjb file to be viewed in the browser.

Dependencies:
The following files must be located in the home directory that the .ktr/.kjb is launched
1. pentaho.css
2. ui/images
3. ui/script/collapse_expand_single_item.js

Issues:
  .ktr and .kjb cannot be opened by internet explorer.
  internet explorer renders correctly if .ktr is changed to .xml

-->

<xsl:output
    method="html"
    version="4.0"
    encoding="UTF-8"
    omit-xml-declaration="yes"
    media-type="text/html"
	indent="yes"
    doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
    doctype-system="http://www.w3.org/TR/html4/loose.dtd"
/>


<xsl:preserve-space elements="*"/>
<xsl:variable name="newline">
  <!-- ie does not recognize white space so we explicitly define linefeed (newline) char here -->
  <xsl:text>&#x000a;</xsl:text>
</xsl:variable>

<!-- ==================================================================

  START of matching

======================================================================= -->

<xsl:template match="/">

<!-- Use this snippet to hide and show a section by clicking
<img src="ui/images/u.gif" name="imgfirst" width="9" height="9" border="0" >
<a href="#first" onClick="shoh('first');" >Customer Support</a>

<div style="display: none;" id="first" >

    Here is the content you want to collapse or expand. You can place tables here, images, anything.

</div>
-->

  <html>
    <!-- Use CSS from pentaho website -->
    <head>
      <link rel="stylesheet" type="text/css" href="ui/pentaho.css" media="all"/>
  	  <script language="JavaScript" src="ui/script/collapse_expand_single_item.js"></script>
    </head>
    <body style="background-color:white">
    <a href="http://wiki.pentaho.com/display/EAI/Latest+Pentaho+Data+Integration+%28aka+Kettle%29+Documentation">
      <h1>Pentaho Data Integration Documentation</h1>
    </a>

	<!-- Call this template to process all nodes recursively -->
	<xsl:call-template name="node"/>

    </body>
  </html>
  </xsl:template>

  <xsl:template name="node" >
    <!-- Process leafs then process child nodes -->
    <xsl:call-template name="leafs"/>

    <!-- Process child nodes -->

    <xsl:for-each select="*[count(*) > 0]">
	  <!-- HEADER -->
	  <!-- Start new div and show name of node in caps -->
      <div class="wiki-content" style="padding-left:+20px; text-align:left;">
      <!-- Set heading type according to Depth of tree -->
      <xsl:choose>
	  <!-- Header for high level groups levels 1-2 or job entry -->
      <xsl:when test="(count(ancestor::*) &lt; 3 and name() != 'connection') or name()='entry'">
        <h2 style="text-align:left">

		    <!-- Header for Trans or Job, info section, steps or entry -->
			<xsl:choose>

			<!-- level 1 Header for Transformation Block -->
			<xsl:when test="name()='transformation'">
              <xsl:call-template name="trans"/>
  		    </xsl:when>

			<!-- level 1 Header for Job Block -->
			<xsl:when test="name()='job'">
			  <xsl:call-template name="job"/>
			</xsl:when>

			<!-- level 2 Header for Info Block, Trans or Job -->
			<xsl:when test="name()='info'">
			  <xsl:call-template name="info"/>
			</xsl:when>

			<!-- Header for step or entry -->
			<xsl:when test="name()='step' or name()='entry'">
              <!-- STEP/ENTRY In CAPS -->
			  <span style="text-transform:uppercase">
                <xsl:value-of select="name()"/>
		      </span>
	          <xsl:text>  </xsl:text>
				<!-- add image link -->
			    <xsl:call-template name="img">
			      <xsl:with-param name="name">
			        <xsl:value-of select="./type" />
		          </xsl:with-param>
			    </xsl:call-template>
			  <!-- Name of the step or entry in [] -->
			  <xsl:text> [</xsl:text>
			  <xsl:value-of select="./name"/>
			  <xsl:text>] </xsl:text>
			</xsl:when>

			<xsl:otherwise>
			  <span style="text-transform:uppercase">
                <xsl:value-of select="name()"/>
		      </span>
			</xsl:otherwise>

			</xsl:choose>
        </h2>
      </xsl:when>

	  <!-- Lower level blocks -->
      <xsl:otherwise>
        <h4 style="text-transform:uppercase; text-align:left; background:white">
          <xsl:value-of select="name()"/>
		  <xsl:if test="name">
		    <xsl:text> [</xsl:text><xsl:value-of select="name"/><xsl:text>]</xsl:text>
		  </xsl:if>
        </h4>
      </xsl:otherwise>
      </xsl:choose>

      <!-- bread crumbs
      <code><xsl:for-each select="ancestor::*"><xsl:value-of select="name()"/>::</xsl:for-each></code>
      -->
      <!-- END OF HEADERS -->

	  <!-- "Show Hide" section -->
      <a href="#{generate-id(.)}"  onClick="shoh('{generate-id(.)}');" >
  	    <img src="ui/images/u.gif" name="img{generate-id(.)}" width="9" height="9" border="0" />
	  </a>
	  <div style="display:none" id="{generate-id(.)}" >
	  <!-- Start of DIV, match to closing DIV -->

	  <!-- DETAILS -->
      <xsl:choose>
      <!-- Process special nodes where we pivot the attribute value pairs into a table -->

	  <!-- Connection attributes -->
      <xsl:when test="name() = 'attributes'">
        <xsl:call-template name="attr"/>
      </xsl:when>

	  <!-- hops and order in trans and job -->
      <xsl:when test="name() = 'order' or name() = 'hops'">
        <xsl:call-template name="order"/>
      </xsl:when>

	  <!-- all GUI XLOC and YLOC -->
      <xsl:when test="name() = 'GUI'">
        <xsl:call-template name="gui"/>
      </xsl:when>

	  <!-- All instances of fields -->
      <xsl:when test="name() = 'fields'">
        <xsl:call-template name="leafs"/>
        <h4 style="background:white">SELECT</h4>
        <xsl:call-template name="fields"/>
        <h4 style="background:white">METADATA</h4>
        <xsl:call-template name="meta_fields"/>
      </xsl:when>

	  <!-- Trans Lookup step -->
      <xsl:when test="name() = 'lookup'">
        <xsl:call-template name="leafs"/>
        <h4 style="background:white">KEYS</h4>
        <xsl:call-template name="keys"/>
        <h4 style="background:white">VALUES</h4>
        <xsl:call-template name="values"/>
      </xsl:when>

	  <!-- Database connections -->
	  <xsl:when test="name() = 'connection'">
	    <xsl:call-template name="leafs"/>
      </xsl:when>

      <!-- Default: Process a child node (generate details) -->
      <xsl:otherwise>
        <xsl:call-template name="node"/>
      </xsl:otherwise>
      </xsl:choose>

	  </div> <!-- Details -->
      </div> <!-- NODE -->
    </xsl:for-each>
  </xsl:template>

<!-- =================================================================

  Display routines

==================================================================== -->

  <!-- Process all leaf nodes of current node -->
  <xsl:template name="leafs">
    <!-- The leafs are laid out in a table of Element: Value pair -->
    <table class="confluenceTable"><tbody>
    <xsl:for-each select="*[count(text())=1]"> <!-- Show only non-empty elements -->
      <tr>
      <td valign="top" style="text-transform:uppercase" class="confluenceTd">
        <xsl:value-of select="name()"/>
      </td>
      <td class="confluenceTd">
        <xsl:choose>

		<xsl:when test="name()='type'">
		<!-- Lookup help page for the step/entry -->
		<xsl:call-template name="wiki-pentaho">
		  <xsl:with-param name="name">
		    <xsl:value-of select="." />
	      </xsl:with-param>
		</xsl:call-template>
		</xsl:when>

		<!-- Display code or multi line notes -->
        <xsl:when test="name()='sql' or name()='jsScript_script' or name()='note'">
		  <code>
          <xsl:call-template name="string-newline">
            <xsl:with-param name="original">
              <xsl:value-of select="."/>
            </xsl:with-param>
          </xsl:call-template>
          </code>
        </xsl:when>

        <xsl:otherwise>
          <xsl:value-of select="."/>
        </xsl:otherwise>

        </xsl:choose>
      </td>
      </tr>
    </xsl:for-each>
    </tbody></table>
  </xsl:template>

  <!-- Pivot table style 1:
       <table-name>
         <row>
           <col-1>
           <col-2>
         <row>
           <col1>
           <col2>
  -->
  <xsl:template name="pivot1">
    <table class="confluenceTable"><tbody>

    <!-- Table Header -->
    <xsl:if test="*[1]">
      <xsl:for-each select="*[1]/*">
        <th style="text-transform:uppercase" class="confluenceTh">
        <xsl:value-of select="name()"/>
        </th>
      </xsl:for-each>
    </xsl:if>

    <!-- Table Rows -->
    <xsl:for-each select="*">
      <tr>
      <xsl:for-each select="./*">
        <td class="confluenceTd">
        <xsl:value-of select="."/>
        </td>
      </xsl:for-each>
      </tr>
    </xsl:for-each>

    </tbody></table>
  </xsl:template>

  <xsl:template name="table-row">
      <tr>
      <xsl:for-each select="*">
        <td class="confluenceTd">
        <xsl:value-of select="."/>
        </td>
      </xsl:for-each>
      </tr>
  </xsl:template>

  <!-- Pivot table style 2: single row table
       <table-name>
           <col-1>
           <col-2>
           <col-3>
  -->
  <xsl:template name="pivot2">
    <table class="confluenceTable"><tbody>

    <!-- Header - name of the nodes -->
    <xsl:for-each select="*">
      <th style="text-transform:uppercase" class="confluenceTh">
      <xsl:value-of select="name()"/>
      </th>
    </xsl:for-each>

    <!-- Single row -->
    <tr>
    <xsl:for-each select="*">
      <td class="confluenceTd">
      <xsl:value-of select="."/>
      </td>
    </xsl:for-each>
    </tr>

    </tbody></table>
  </xsl:template>

  <!-- Pivot table style 3: Same as Style 1 but mixed rows
     <group-of-tables>
       <table-name-1>
           <col-1>
           <col-2>
           <col-3>
       <table-name-1>
           <col-1>
           <col-2>
           <col-3>
       <table-name-2>
           <col-1>
           <col-2>
           <col-3>
       <table-name-2>
           <col-1>
           <col-2>
           <col-3>
     Parameter1 table-name
  -->
  <xsl:template name="pivot3">
    <xsl:param name="group"/>

    <table class="confluenceTable"><tbody>

    <!-- Table Header -->
    <xsl:if test="*[name()=$group][1]">
      <xsl:for-each select="*[name()=$group][1]/*">
        <th style="text-transform:uppercase" class="confluenceTh">
        <xsl:value-of select="name()"/>
        </th>
      </xsl:for-each>
    </xsl:if>

    <!-- Table Rows -->
    <xsl:for-each select="*[name()=$group]">
      <tr>
      <xsl:for-each select="*">
        <td class="confluenceTd">
        <xsl:value-of select="."/>
        </td>
      </xsl:for-each>
      </tr>
    </xsl:for-each>

    </tbody></table>
  </xsl:template>

  <!-- Transformation header -->
  <xsl:template name = "trans">
	<h1 style="text-align:left">
	  <img src="ui/images/TRN.png"/>
	  <a href="http://wiki.pentaho.com/display/EAI/Pentaho+Data+Integration+Steps">
	    <xsl:value-of select="./info/name/text()" />
	  </a>
	  <xsl:if test="./info/capture_step_performance/text()='Y'">
	    <img src="ui/images/perfmon2.jpeg"/>
	  </xsl:if>
	</h1>
  </xsl:template>

  <!-- Job header -->
  <xsl:template name = "job">
	<h1 style="text-align:left">
	  <img src="ui/images/JOB.png"/>
	  <a href="http://wiki.pentaho.com/display/EAI/Pentaho+Data+Integration+Job+Entries">
		<xsl:value-of select="./name/text()" />
	  </a>
	</h1>
  </xsl:template>

  <!-- Info header -->
  <xsl:template name = "info">
	<h1 style="text-align:left">
	  INFORMATION
	</h1>
  </xsl:template>

  <!-- Code attribute values in Connection -->
  <xsl:template name="attr">
    <xsl:call-template name="pivot1"/>
  </xsl:template>

  <!-- From To laid out in a table on the orders -->
  <xsl:template name="order">
    <xsl:call-template name="pivot1"/>
  </xsl:template>

  <!-- GUI coords, laid out in a single row table -->
  <xsl:template name="gui">
    <xsl:call-template name="pivot2"/>
  </xsl:template>

  <!-- Fields in a select step -->
  <xsl:template name="fields">
    <xsl:call-template name="pivot3">
      <xsl:with-param name="group">field</xsl:with-param>
    </xsl:call-template>
  </xsl:template>

  <!-- Meta of fields in a select step -->
  <xsl:template name="meta_fields">
    <xsl:call-template name="pivot3">
      <xsl:with-param name="group">meta</xsl:with-param>
    </xsl:call-template>
  </xsl:template>

  <!-- keys in lookup step -->
  <xsl:template name="keys">
    <xsl:call-template name="pivot3">
      <xsl:with-param name="group">key</xsl:with-param>
    </xsl:call-template>
  </xsl:template>

  <!-- Values in lookup step -->
  <xsl:template name="values">
    <xsl:call-template name="pivot3">
      <xsl:with-param name="group">value</xsl:with-param>
    </xsl:call-template>
  </xsl:template>

  <!-- Replace String -->
  <xsl:template name="replace-substring">
    <xsl:param name="original"/>
    <xsl:param name="substring"/>
    <xsl:param name="replacement" select="''"/>

    <xsl:variable name="first">
      <xsl:choose>
      <xsl:when test="contains($original, $substring)">
        <xsl:value-of select="substring-before($original, $substring)"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$original"/>
      </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:variable name="middle">
      <xsl:choose>
      <xsl:when test="contains($original, $substring)">
        <xsl:value-of select="$replacement"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text></xsl:text>
      </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:variable name="last">
      <xsl:choose>
      <xsl:when test="contains($original, $substring)">
        <xsl:choose>
        <xsl:when test="contains(substring-after($original, $substring),$substring)">
          <xsl:call-template name="replace-substring">
            <xsl:with-param name="original">
              <xsl:value-of select="substring-after($original, $substring)"/>
            </xsl:with-param>
            <xsl:with-param name="substring">
              <xsl:value-of select="$substring"/>
            </xsl:with-param>
            <xsl:with-param name="replacement">
              <xsl:value-of select="$replacement"/>
            </xsl:with-param>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="substring-after($original, $substring)"/>
        </xsl:otherwise>
        </xsl:choose>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text></xsl:text>
      </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:value-of select="concat($first, $middle, $last)"/>
  </xsl:template>

  <!-- Print line separated by newline -->
  <xsl:template name="string-newline">
    <xsl:param name="original"/>

    <xsl:variable name="first">
      <xsl:choose>
      <xsl:when test="contains($original, $newline)">
        <xsl:value-of select="substring-before($original, $newline)"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$original"/>
      </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:variable name="last">
      <xsl:choose>
      <xsl:when test="contains($original, $newline)">
        <xsl:value-of select="substring-after($original, $newline)"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text></xsl:text>
      </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:value-of select="$first"/><br/>
    <xsl:if test="string-length($last) > 0">
      <xsl:call-template name="string-newline">
        <xsl:with-param name="original">
          <xsl:value-of select="$last"/>
        </xsl:with-param>
      </xsl:call-template>
    </xsl:if>

  </xsl:template>

  <!-- Lookup to get anchor for step/entry images -->
  <xsl:template name="img">
  <xsl:param name="name"/>
  <xsl:variable name="name-caps">
    <xsl:value-of
	  select="translate(
				 $name
				 , 'abcdefghijklmnopqrstuvwxyz'
				 , 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
			  )"
	/>
  </xsl:variable>
  <xsl:variable name="fname">
  <xsl:choose>
	<xsl:when test="$name-caps='DUMMY'"><xsl:text>ui/images/DUM.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='APPEND'"><xsl:text>ui/images/APP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='TABLEINPUT'"><xsl:text>ui/images/TIP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SOCKETREADER'"><xsl:text>ui/images/SKR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SOCKETWRITER'"><xsl:text>ui/images/SKW.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SELECTVALUES'"><xsl:text>ui/images/SEL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='TEXTFILEINPUT'"><xsl:text>ui/images/TFI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='CALCULATOR'"><xsl:text>ui/images/CLC.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='CONSTANT'"><xsl:text>ui/images/CST.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='ABORT'"><xsl:text>ui/images/ABR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SEQUENCE'"><xsl:text>ui/images/SEQ.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='TABLEOUTPUT'"><xsl:text>ui/images/TOP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='INFOBRIGHTOUTPUT'"><xsl:text>ui/images/IBL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SORTROWS'"><xsl:text>ui/images/SRT.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='ORABULKLOADER'"><xsl:text>ui/images/OBL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='INJECTOR'"><xsl:text>ui/images/INJ.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILTERROWS'"><xsl:text>ui/images/FLT.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='TEXTFILEOUTPUT'"><xsl:text>ui/images/TFO.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SYSTEMINFO'"><xsl:text>ui/images/SYS.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='STREAMLOOKUP'"><xsl:text>ui/images/SLU.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='UNIQUE'"><xsl:text>ui/images/UNQ.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DBLOOKUP'"><xsl:text>ui/images/DLU.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DBJOIN'"><xsl:text>ui/images/DBJ.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DIMENSIONLOOKUP'"><xsl:text>ui/images/DIM.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='EXCELINPUT'"><xsl:text>ui/images/XLI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='COMBINATIONLOOKUP'"><xsl:text>ui/images/CMB.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SCRIPTVALUEMOD'"><xsl:text>ui/images/SCR_mod.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='JOINROWS'"><xsl:text>ui/images/JRW.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='UPDATE'"><xsl:text>ui/images/UPD.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='INSERTUPDATE'"><xsl:text>ui/images/INU.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELETE'"><xsl:text>ui/images/Delete.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MAPPINGINPUT'"><xsl:text>ui/images/MPI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MAPPING'"><xsl:text>ui/images/MAP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MAPPINGOUTPUT'"><xsl:text>ui/images/MPO.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SETVARIABLE'"><xsl:text>ui/images/SVA.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='GETVARIABLE'"><xsl:text>ui/images/GVA.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='NULLIF'"><xsl:text>ui/images/NUI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='EXECSQL'"><xsl:text>ui/images/SQL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='ROWSFROMRESULT'"><xsl:text>ui/images/FCH.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='ROWSTORESULT'"><xsl:text>ui/images/TCH.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='BLOCKINGSTEP'"><xsl:text>ui/images/BLK.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='HTTP'"><xsl:text>ui/images/WEB.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MERGEROWS'"><xsl:text>ui/images/MRG.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='GETFILENAMES'"><xsl:text>ui/images/GFN.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILESFROMRESULT'"><xsl:text>ui/images/FFR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILESTORESULT'"><xsl:text>ui/images/FTR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='GROUPBY'"><xsl:text>ui/images/GRP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='ANALYTICQUERY'"><xsl:text>ui/images/AQI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MERGEJOIN'"><xsl:text>ui/images/MJOIN.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SORTEDMERGE'"><xsl:text>ui/images/SMG.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='XMLINPUT'"><xsl:text>ui/images/XIN.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='XMLINPUTSAX'"><xsl:text>ui/images/XIS.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='XMLOUTPUT'"><xsl:text>ui/images/XOU.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='EXCELOUTPUT'"><xsl:text>ui/images/XLO.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DBPROC'"><xsl:text>ui/images/PRC.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DENORMALISER'"><xsl:text>ui/images/UNP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='NORMALISER'"><xsl:text>ui/images/NRM.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FLATTENER'"><xsl:text>ui/images/FLA.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='XBASEINPUT'"><xsl:text>ui/images/XBI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='ACCESSOUTPUT'"><xsl:text>ui/images/ACO.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='REGEXEVAL'"><xsl:text>ui/images/RGE.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='ACCESSINPUT'"><xsl:text>ui/images/ACI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='ADDXML'"><xsl:text>ui/images/XIN.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='AGGREGATEROWS'"><xsl:text>ui/images/AGG.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MONDRIANINPUT'"><xsl:text>ui/images/MON.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='GETFILESROWSCOUNT'"><xsl:text>ui/images/FRC.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='LDAPINPUT'"><xsl:text>ui/images/LIP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='GETXMLDATA'"><xsl:text>ui/images/GXD.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='XSDVALIDATOR'"><xsl:text>ui/images/XSD.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='XSLT'"><xsl:text>ui/images/XSLT.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='VALIDATOR'"><xsl:text>ui/images/VLD.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SQLFILEOUTPUT'"><xsl:text>ui/images/SFO.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SPLITFIELDTOROWS'"><xsl:text>ui/images/SFtR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='PROPERTYINPUT'"><xsl:text>ui/images/PFI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='GPBULKLOADER'"><xsl:text>ui/images/GBL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='PGBULKLOADER'"><xsl:text>ui/images/PGBL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='LDIFINPUT'"><xsl:text>ui/images/LDI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='PROPERTYOUTPUT'"><xsl:text>ui/images/PFO.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='VALUEMAPPER'"><xsl:text>ui/images/SWC.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SWITCHCASE'"><xsl:text>ui/images/SWC.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='XMLJOIN'"><xsl:text>ui/images/XJN.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='STEPMETASTRUCTURE'"><xsl:text>ui/images/STMD.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='TABLEEXISTS'"><xsl:text>ui/images/TEX.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='COLUMNEXISTS'"><xsl:text>ui/images/CEX.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILEEXISTS'"><xsl:text>ui/images/FEX.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='CLONEROW'"><xsl:text>ui/images/CLR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELAY'"><xsl:text>ui/images/DLT.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='CHECKSUM'"><xsl:text>ui/images/CSM.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='RANDOMVALUE'"><xsl:text>ui/images/RVA.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='GETSUBFOLDERS'"><xsl:text>ui/images/LSF.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MONETDBBULKLOADER'"><xsl:text>ui/images/OBL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MAILVALIDATOR'"><xsl:text>ui/images/MAV.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MAIL'"><xsl:text>ui/images/MAIL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='CREDITCARDVALIDATOR'"><xsl:text>ui/images/CCV.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='PROCESSFILES'"><xsl:text>ui/images/PPF.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DETECTLASTROW'"><xsl:text>ui/images/DLR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DETECTEMPTYSTREAM'"><xsl:text>ui/images/EMS.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='WRITETOLOG'"><xsl:text>ui/images/WTL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SAMPLEROWS'"><xsl:text>ui/images/SR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='GETPREVIOUSROWFIELD'"><xsl:text>ui/images/PRV.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='EXECSQLROW'"><xsl:text>ui/images/SQLR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DYNAMICSQLROW'"><xsl:text>ui/images/DSR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='NUMBERRANGE'"><xsl:text>ui/images/NRI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SYNCHRONIZEAFTERMERGE'"><xsl:text>ui/images/SAM.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='LUCIDDBBULKLOADER'"><xsl:text>ui/images/OBL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MYSQLBULKLOADER'"><xsl:text>ui/images/OBL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='REPLACESTRING'"><xsl:text>ui/images/RST.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='STRINGCUT'"><xsl:text>ui/images/SRC.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='IFNULL'"><xsl:text>ui/images/IFN.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='RSSOUTPUT'"><xsl:text>ui/images/RRO.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='RSSINPUT'"><xsl:text>ui/images/RIN.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SALESFORCEINPUT'"><xsl:text>ui/images/SFI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FORMULA'"><xsl:text>ui/images/FRM.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='JANINO'"><xsl:text>ui/images/janino.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SCRIPTVALUEMOD'"><xsl:text>ui/images/janino.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='RESERVOIRSAMPLING'"><xsl:text>ui/images/RS.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='UNIVARIATESTATS'"><xsl:text>ui/images/US.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='UNIQUEROWSBYHASHSET'"><xsl:text>ui/images/URH.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='HTTPPOST'"><xsl:text>ui/images/HTP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SETVALUECONSTANT'"><xsl:text>ui/images/SVC.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SETVALUEFIELD'"><xsl:text>ui/images/SVF.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='EXECPROCESS'"><xsl:text>ui/images/RPL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='WEBSERVICELOOKUP'"><xsl:text>ui/images/WSL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='CSVINPUT'"><xsl:text>ui/images/TFI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='PARALLELGZIPCSVINPUT'"><xsl:text>ui/images/TFI.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='JOB'"><xsl:text>ui/images/JOB.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='TRANS'"><xsl:text>ui/images/TRN.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SHELL'"><xsl:text>ui/images/SHL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MAIL'"><xsl:text>ui/images/MAIL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SQL'"><xsl:text>ui/images/SQL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FTP'"><xsl:text>ui/images/FTP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='TABLE_EXISTS'"><xsl:text>ui/images/TEX.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILE_EXISTS'"><xsl:text>ui/images/FEX.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='EVAL'"><xsl:text>ui/images/RES.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SPECIAL'"><xsl:text>ui/images/STR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SFTP'"><xsl:text>ui/images/SFT.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='HTTP'"><xsl:text>ui/images/WEB.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='CREATE_FILE'"><xsl:text>ui/images/CFJ.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELETE_FILE'"><xsl:text>ui/images/DFJ.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='WAIT_FOR_FILE'"><xsl:text>ui/images/WFF.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SFTPPUT'"><xsl:text>ui/images/SFP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILE_COMPARE'"><xsl:text>ui/images/BFC.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MYSQL_BULK_LOAD'"><xsl:text>ui/images/MBL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MSGBOX_INFO'"><xsl:text>ui/images/INF.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELAY'"><xsl:text>ui/images/DLT.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='ZIP_FILE'"><xsl:text>ui/images/ZIP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='XSLT'"><xsl:text>ui/images/XSLT.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MYSQL_BULK_FILE'"><xsl:text>ui/images/MBF.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='ABORT'"><xsl:text>ui/images/ABR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='GET_POP'"><xsl:text>ui/images/GETPOP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='PING'"><xsl:text>ui/images/PNG.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELETE_FILES'"><xsl:text>ui/images/DFS.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SUCCESS'"><xsl:text>ui/images/SUC.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='XSD_VALIDATOR'"><xsl:text>ui/images/XSD.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='WRITE_TO_LOG'"><xsl:text>ui/images/WTL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='COPY_FILES'"><xsl:text>ui/images/CPY.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DTD_VALIDATOR'"><xsl:text>ui/images/DTD.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FTP_PUT'"><xsl:text>ui/images/PFP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='UNZIP'"><xsl:text>ui/images/UZP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='CREATE_FOLDER'"><xsl:text>ui/images/CRF.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FOLDER_IS_EMPTY'"><xsl:text>ui/images/EFO.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILES_EXIST'"><xsl:text>ui/images/LFE.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FOLDERS_COMPARE'"><xsl:text>ui/images/FCP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='ADD_RESULT_FILENAMES'"><xsl:text>ui/images/AFN.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELETE_RESULT_FILENAMES'"><xsl:text>ui/images/DFN.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MSSQL_BULK_LOAD'"><xsl:text>ui/images/MBL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MOVE_FILES'"><xsl:text>ui/images/MVF.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='COPY_MOVE_RESULT_FILENAMES'"><xsl:text>ui/images/CMR.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='JOBCATEGORY.CATEGORY.XML_WELL_FORMED'"><xsl:text>ui/images/XFC.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SSH2_GET'"><xsl:text>ui/images/SHG.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SSH2_PUT'"><xsl:text>ui/images/SHP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='FTP_DELETE'"><xsl:text>ui/images/FTPD.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELETE_FOLDERS'"><xsl:text>ui/images/DSF.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='COLUMNS_EXIST'"><xsl:text>ui/images/CEX.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='EXPORT_REPOSITORY'"><xsl:text>ui/images/EREP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='CONNECTED_TO_REPOSITORY'"><xsl:text>ui/images/CREP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='TRUNCATE_TABLES'"><xsl:text>ui/images/TRT.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SET_VARIABLES'"><xsl:text>ui/images/SVA.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='MS_ACCESS_BULK_LOAD'"><xsl:text>ui/images/MBL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='WAIT_FOR_SQL'"><xsl:text>ui/images/WSQL.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='EVAL_TABLE_CONTENT'"><xsl:text>ui/images/ETC.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SIMPLE_EVAL'"><xsl:text>ui/images/SEV.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='SNMP_TRAP'"><xsl:text>ui/images/SNMP.png</xsl:text></xsl:when>
	<xsl:when test="$name-caps='JOBCATEGORY.CATEGORY.MAIL_VALIDATOR'"><xsl:text>ui/images/MAV.png</xsl:text></xsl:when>
    <xsl:otherwise><xsl:text>ui/images/spoon32.png</xsl:text></xsl:otherwise>
  </xsl:choose>
  </xsl:variable>

  <img>
	<xsl:attribute name="src">
	  <xsl:value-of select="$fname"/>
	</xsl:attribute>
	<xsl:attribute name="style">
	  <xsl:text>border:1px solid black</xsl:text>
	</xsl:attribute>
  </img>
  </xsl:template>
  <!-- Lookup to get anchor for step/entry help page on wiki.pentaho -->
  <xsl:template name="wiki-pentaho">
  <xsl:param name="name"/>
  <xsl:variable name="name-caps">
    <xsl:value-of
	  select="translate(
				 $name
				 , 'abcdefghijklmnopqrstuvwxyz'
				 , 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
			  )"
	/>
  </xsl:variable>
  <xsl:variable name="web-addr">
  <xsl:choose>
	<xsl:when test="$name-caps='SPECIAL'"><xsl:text>http://wiki.pentaho.com/display/EAI/Start </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DUMMY'"><xsl:text>http://wiki.pentaho.com/display/EAI/Dummy+Job+Entry </xsl:text></xsl:when>
	<xsl:when test="$name-caps='ABORT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Abort+Job </xsl:text></xsl:when>
	<xsl:when test="$name-caps='MSGBOX_INFO'"><xsl:text>http://wiki.pentaho.com/display/EAI/Display+Msgbox+info </xsl:text></xsl:when>
	<xsl:when test="$name-caps='JOB'"><xsl:text>http://wiki.pentaho.com/display/EAI/Job+%28Job+Entry%29 </xsl:text></xsl:when>
	<xsl:when test="$name-caps='PING'"><xsl:text>http://wiki.pentaho.com/display/EAI/Ping+a+host </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SUCCESS'"><xsl:text>http://wiki.pentaho.com/display/EAI/Success </xsl:text></xsl:when>
	<xsl:when test="$name-caps='TRAN'"><xsl:text>http://wiki.pentaho.com/display/EAI/Transformation+%28job+entry%29 </xsl:text></xsl:when>
	<xsl:when test="$name-caps='WRITE_TO_LOG'"><xsl:text>http://wiki.pentaho.com/display/EAI/Write+to+log </xsl:text></xsl:when>
	<xsl:when test="$name-caps='GET_POP'"><xsl:text>http://wiki.pentaho.com/display/EAI/Get+Mails+from+POP </xsl:text></xsl:when>
	<xsl:when test="$name-caps='MAIL'"><xsl:text>http://wiki.pentaho.com/display/EAI/Mail </xsl:text></xsl:when>
	<xsl:when test="$name-caps='ADD_RESULT_FILENAMES'"><xsl:text>http://wiki.pentaho.com/display/EAI/Add+filenames+to+result </xsl:text></xsl:when>
	<xsl:when test="$name-caps='VALUEMAPPER'"><xsl:text>http://wiki.pentaho.com/display/EAI/Value+Mapper </xsl:text></xsl:when>
	<xsl:when test="$name-caps='COPY_FILES'"><xsl:text>http://wiki.pentaho.com/display/EAI/Copy+Files </xsl:text></xsl:when>
	<xsl:when test="$name-caps='CREATE_FOLDER'"><xsl:text>http://wiki.pentaho.com/display/EAI/Create+a+folder </xsl:text></xsl:when>
	<xsl:when test="$name-caps='CREATE_FILE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Create+a+file </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELETE_FILE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Delete+a+file </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELETE_RESULT_FILENAMES'"><xsl:text>http://wiki.pentaho.com/display/EAI/Delete+filenames+from+result </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELETE_FILES'"><xsl:text>http://wiki.pentaho.com/display/EAI/Delete+Files </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELETE_FOLDERS'"><xsl:text>http://wiki.pentaho.com/display/EAI/Delete+folders </xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILE_COMPARE'"><xsl:text>http://wiki.pentaho.com/display/EAI/File+compare </xsl:text></xsl:when>
	<xsl:when test="$name-caps='HTTP'"><xsl:text>http://wiki.pentaho.com/display/EAI/HTTP </xsl:text></xsl:when>
	<xsl:when test="$name-caps='MOVE_FILES'"><xsl:text>http://wiki.pentaho.com/display/EAI/Move+files </xsl:text></xsl:when>
	<xsl:when test="$name-caps='UNZIP'"><xsl:text>http://wiki.pentaho.com/display/EAI/Unzip+file </xsl:text></xsl:when>
	<xsl:when test="$name-caps='WAIT_FOR_FILE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Wait+for+a+file </xsl:text></xsl:when>
	<xsl:when test="$name-caps='ZIP_FILE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Zip+files </xsl:text></xsl:when>
	<xsl:when test="$name-caps='TRUNCATE_TABLES'"><xsl:text>http://wiki.pentaho.com/display/EAI/Truncate+tables </xsl:text></xsl:when>
	<xsl:when test="$name-caps='FOLDER_IS_EMPTY'"><xsl:text>http://wiki.pentaho.com/display/EAI/Check+if+a+folder+is+empty </xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILES_EXIST'"><xsl:text>http://wiki.pentaho.com/display/EAI/File+Exists+%28Job+Entry%29 </xsl:text></xsl:when>
	<xsl:when test="$name-caps='COLUMNS_EXIST'"><xsl:text>http://wiki.pentaho.com/display/EAI/Columns+exist+in+a+table </xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILE_EXISTS'"><xsl:text>http://wiki.pentaho.com/display/EAI/File+Exists+%28Job+Entry%29 </xsl:text></xsl:when>
	<xsl:when test="$name-caps='TABLE_EXISTS'"><xsl:text>http://wiki.pentaho.com/display/EAI/Table+Exists+%28Job+Entry%29 </xsl:text></xsl:when>
	<xsl:when test="$name-caps='WAIT_FOR_FILE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Wait+for </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Evaluating+conditions+in+The+JavaScript+job+entry </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SQL'"><xsl:text>http://wiki.pentaho.com/display/EAI/SQL </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SHELL'"><xsl:text>http://wiki.pentaho.com/display/EAI/Shell </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Bulkload+into+MySQL </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Check+if+XML+file+is+well+formed </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DTD_VALIDATOR'"><xsl:text>http://wiki.pentaho.com/display/EAI/DTD+Validator+%28Job+Entry%29 </xsl:text></xsl:when>
	<xsl:when test="$name-caps='XSD_VALIDATOR'"><xsl:text>http://wiki.pentaho.com/display/EAI/XSD+Validator+%28Job+Entry%29 </xsl:text></xsl:when>
	<xsl:when test="$name-caps='XSLT'"><xsl:text>http://wiki.pentaho.com/display/EAI/XSL+Transformation+%28Job+Entry%29 </xsl:text></xsl:when>
	<xsl:when test="$name-caps='FTP'"><xsl:text>http://wiki.pentaho.com/display/EAI/Get+a+file+with+FTP </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SFTP'"><xsl:text>http://wiki.pentaho.com/display/EAI/Get+a+file+with+SFTP </xsl:text></xsl:when>
	<xsl:when test="$name-caps='ACCESSINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Access+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps='CSVINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/CSV+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/De-serialize+from+file </xsl:text></xsl:when>
	<xsl:when test="$name-caps='EXCELINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Excel+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Fixed+File+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Generate+Rows </xsl:text></xsl:when>
	<xsl:when test="$name-caps='RANDOMVALUE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Generate+Random+Value </xsl:text></xsl:when>
	<xsl:when test="$name-caps='GETFILENAMES'"><xsl:text>http://wiki.pentaho.com/display/EAI/Get+File+Names </xsl:text></xsl:when>
	<xsl:when test="$name-caps='GETFILESROWSCOUNT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Get+Files+Row+Count </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SYSTEMINFO'"><xsl:text>http://wiki.pentaho.com/display/EAI/Get+System+Info </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Get+Data+From+XML </xsl:text></xsl:when>
	<xsl:when test="$name-caps='LDAPINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/LDAP+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps='LDIFINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/LDIF+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps='MONDRIANINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Mondrian+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps='PROPERTYINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Property+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps='RSSINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/RSS+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Streaming+XML+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps='TABLEINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Table+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps='TEXTFILEINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Text+File+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps='XBASEINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/XBase+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/XML+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps='ACCESSOUTPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Access+Output </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELETE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Delete </xsl:text></xsl:when>
	<xsl:when test="$name-caps='EXCELOUTPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Excel+Output </xsl:text></xsl:when>
	<xsl:when test="$name-caps='INSERTUPDATE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Insert+-+Update </xsl:text></xsl:when>
	<xsl:when test="$name-caps='PROPERTYOUTPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Property+Output </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SQLFILEOUTPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/SQL+File+Output </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Serialize+to+file </xsl:text></xsl:when>
	<xsl:when test="$name-caps='TABLEOUTPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Table+Output </xsl:text></xsl:when>
	<xsl:when test="$name-caps='TEXTFILEOUTPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Text+File+Output </xsl:text></xsl:when>
	<xsl:when test="$name-caps='UPDATE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Update </xsl:text></xsl:when>
	<xsl:when test="$name-caps='XMLOUTPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/XML+Output </xsl:text></xsl:when>
	<xsl:when test="$name-caps='ABORT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Abort </xsl:text></xsl:when>
	<xsl:when test="$name-caps='ADDXML'"><xsl:text>http://wiki.pentaho.com/display/EAI/Add+XML </xsl:text></xsl:when>
	<xsl:when test="$name-caps='CHECKSUM'"><xsl:text>http://wiki.pentaho.com/display/EAI/Add+a+checksum </xsl:text></xsl:when>
	<xsl:when test="$name-caps='CONSTANT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Add+Constants </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SEQUENCE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Add+sequence </xsl:text></xsl:when>
	<xsl:when test="$name-caps='ANALYTICQUERY'"><xsl:text>http://wiki.pentaho.com/display/EAI/Analytic+Query </xsl:text></xsl:when>
	<xsl:when test="$name-caps='APPEND'"><xsl:text>http://wiki.pentaho.com/display/EAI/Append+streams </xsl:text></xsl:when>
	<xsl:when test="$name-caps='BLOCKINGSTEP'"><xsl:text>http://wiki.pentaho.com/display/EAI/Blocking+step </xsl:text></xsl:when>
	<xsl:when test="$name-caps='CALCULATOR'"><xsl:text>http://wiki.pentaho.com/display/EAI/Calculator </xsl:text></xsl:when>
	<xsl:when test="$name-caps='CLONEROW'"><xsl:text>http://wiki.pentaho.com/display/EAI/Clone+row </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Closure+Generator </xsl:text></xsl:when>
	<xsl:when test="$name-caps='VALIDATOR'"><xsl:text>http://wiki.pentaho.com/display/EAI/Data+Validator </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DELAY'"><xsl:text>http://wiki.pentaho.com/display/EAI/Delay+row </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DUMMY'"><xsl:text>http://wiki.pentaho.com/display/EAI/Dummy+%28do+nothing%29 </xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILTERROWS'"><xsl:text>http://wiki.pentaho.com/display/EAI/Filter+rows </xsl:text></xsl:when>
	<xsl:when test="$name-caps='GROUPBY'"><xsl:text>http://wiki.pentaho.com/display/EAI/Group+By </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Metadata+Structure </xsl:text></xsl:when>
	<xsl:when test="$name-caps='NULLIF'"><xsl:text>http://wiki.pentaho.com/display/EAI/Null+If </xsl:text></xsl:when>
	<xsl:when test="$name-caps='NORMALISER'"><xsl:text>http://wiki.pentaho.com/display/EAI/Row+Normalizer </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DENORMALISER'"><xsl:text>http://wiki.pentaho.com/display/EAI/Row+De-normalizer </xsl:text></xsl:when>
	<xsl:when test="$name-caps='FLATTENER'"><xsl:text>http://wiki.pentaho.com/display/EAI/Flattener </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SELECTVALUES'"><xsl:text>http://wiki.pentaho.com/display/EAI/Select+Values </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SORTROWS'"><xsl:text>http://wiki.pentaho.com/display/EAI/Sort+rows </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Field+Splitter </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SPLITFIELDTOROWS3'"><xsl:text>http://wiki.pentaho.com/display/EAI/Split+field+to+rows </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SWITCHCASE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Switch-Case </xsl:text></xsl:when>
	<xsl:when test="$name-caps='UNIQUE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Unique+Rows </xsl:text></xsl:when>
	<xsl:when test="$name-caps=''"><xsl:text>http://wiki.pentaho.com/display/EAI/Value+Mapper </xsl:text></xsl:when>
	<xsl:when test="$name-caps='XSDVALIDATOR'"><xsl:text>http://wiki.pentaho.com/display/EAI/XSD+Validator </xsl:text></xsl:when>
	<xsl:when test="$name-caps='XSLT'"><xsl:text>http://wiki.pentaho.com/display/EAI/XSL+Transformation </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DBPROC'"><xsl:text>http://wiki.pentaho.com/display/EAI/Call+DB+Procedure </xsl:text></xsl:when>
	<xsl:when test="$name-caps='COLUMNEXISTS'"><xsl:text>http://wiki.pentaho.com/display/EAI/Check+if+a+column+exists </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DBJOIN'"><xsl:text>http://wiki.pentaho.com/display/EAI/Database+Join </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DBLOOKUP'"><xsl:text>http://wiki.pentaho.com/display/EAI/Database+lookup </xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILEEXISTS'"><xsl:text>http://wiki.pentaho.com/display/EAI/File+exists </xsl:text></xsl:when>
	<xsl:when test="$name-caps='HTTP'"><xsl:text>http://wiki.pentaho.com/display/EAI/HTTP+Client </xsl:text></xsl:when>
	<xsl:when test="$name-caps='STREAMLOOKUP'"><xsl:text>http://wiki.pentaho.com/display/EAI/Stream+Lookup </xsl:text></xsl:when>
	<xsl:when test="$name-caps='TABLEEXISTS'"><xsl:text>http://wiki.pentaho.com/display/EAI/Table+Exists </xsl:text></xsl:when>
	<xsl:when test="$name-caps='WEBSERVICELOOKUP'"><xsl:text>http://wiki.pentaho.com/display/EAI/Web+services+lookup </xsl:text></xsl:when>
	<xsl:when test="$name-caps='JOINROWS'"><xsl:text>http://wiki.pentaho.com/display/EAI/Join+Rows+%28Cartesian+product%29 </xsl:text></xsl:when>
	<xsl:when test="$name-caps='MERGEJOIN'"><xsl:text>http://wiki.pentaho.com/display/EAI/Merge+Join </xsl:text></xsl:when>
	<xsl:when test="$name-caps='MERGEROWS'"><xsl:text>http://wiki.pentaho.com/display/EAI/Merge+rows </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SORTEDMERGE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Sorted+Merge </xsl:text></xsl:when>
	<xsl:when test="$name-caps='XMLJOIN'"><xsl:text>http://wiki.pentaho.com/display/EAI/XML+Join </xsl:text></xsl:when>
	<xsl:when test="$name-caps='EXECSQL'"><xsl:text>http://wiki.pentaho.com/display/EAI/Execute+SQL+script </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SCRIPTVALUEMOD'"><xsl:text>http://wiki.pentaho.com/display/EAI/Modified+Java+Script+Value </xsl:text></xsl:when>
	<xsl:when test="$name-caps='REGEXEVAL'"><xsl:text>http://wiki.pentaho.com/display/EAI/Regex+Evaluation </xsl:text></xsl:when>
	<xsl:when test="$name-caps='FORMULA'"><xsl:text>http://wiki.pentaho.com/display/EAI/Formula </xsl:text></xsl:when>
	<xsl:when test="$name-caps='COMBINATIONLOOKUP'"><xsl:text>http://wiki.pentaho.com/display/EAI/Combination+lookup-update </xsl:text></xsl:when>
	<xsl:when test="$name-caps='DIMENSIONLOOKUP'"><xsl:text>http://wiki.pentaho.com/display/EAI/Dimension+Lookup-Update </xsl:text></xsl:when>
	<xsl:when test="$name-caps='MAPPING'"><xsl:text>http://wiki.pentaho.com/display/EAI/Mapping </xsl:text></xsl:when>
	<xsl:when test="$name-caps='MAPPINGINPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Mapping+Input </xsl:text></xsl:when>
	<xsl:when test="$name-caps='MAPPINGOUTPUT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Mapping+Output </xsl:text></xsl:when>
	<xsl:when test="$name-caps='ROWSTORESULT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Copy+rows+to+result </xsl:text></xsl:when>
	<xsl:when test="$name-caps='GETVARIABLE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Get+Variable </xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILESFROMRESULT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Get+files+from+result </xsl:text></xsl:when>
	<xsl:when test="$name-caps='ROWSFROMRESULT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Get+rows+from+result </xsl:text></xsl:when>
	<xsl:when test="$name-caps='SETVARIABLE'"><xsl:text>http://wiki.pentaho.com/display/EAI/Set+Variable </xsl:text></xsl:when>
	<xsl:when test="$name-caps='FILESTORESULT'"><xsl:text>http://wiki.pentaho.com/display/EAI/Set+files+in+result </xsl:text></xsl:when>
	<xsl:when test="$name-caps='MAILVALIDATOR'"><xsl:text>http://wiki.pentaho.com/display/EAI/Mail+Validator </xsl:text></xsl:when>
	<xsl:when test="$name-caps='AGGREGATEROWS'"><xsl:text>http://wiki.pentaho.com/display/EAI/Aggregate+Rows </xsl:text></xsl:when>
	<xsl:when test="$name-caps='ORABULKLOADER'"><xsl:text>http://wiki.pentaho.com/display/EAI/Oracle+Bulk+Loader </xsl:text></xsl:when>
    <xsl:otherwise><xsl:text>http://wiki.pentaho.com/display/EAI/Latest+Pentaho+Data+Integration+%28aka+Kettle%29+Documentation</xsl:text></xsl:otherwise>
  </xsl:choose>
  </xsl:variable>

  <a>
	<xsl:attribute name="href">
	   <xsl:value-of select="$web-addr"/>
	</xsl:attribute>
    <xsl:value-of select="$name"/>
  </a>
  </xsl:template>
</xsl:stylesheet>




testing


1


2123
3