Processing Stylesheets
- 1. Visualisation of a stylesheet hiearachy
- 2. dependency map of stylesheets
      | 1. | Visualisation of a stylesheet hiearachy | 
      |  | DaveP This produces a .dot file, suitable for graphviz, which can produce SVG or various other formats. <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.1">
 <xsl:param name="root" select="'root'"/>
<d:doc xmlns:d="rnib.org.uk/tbs#">
 <revhistory>
   <purpose><para>This stylesheet works with *.xsl to produce *.dot for
graphviz processing</para></purpose>
   <revision>
    <revnumber>1.0</revnumber>
    <date> 2003</date>
    <authorinitials>DaveP</authorinitials>
    <revdescription>
     <para></para>
    </revdescription>
    <revremark></revremark>
   </revision>
  </revhistory>
  </d:doc>
  
  <xsl:output method="text"/>
  <xsl:template match="xsl:stylesheet">
    digraph G{
  
    <xsl:if test="not(*[self::xsl:include or self::xsl:import])">
      NoImportsOrIncludes;
    </xsl:if>
    <xsl:apply-templates select="*[self::xsl:include or self::xsl:import]">
      <xsl:with-param name='src' select="translate($root,'.','_')"/>
    </xsl:apply-templates>
    <xsl:text>
}</xsl:text>
  </xsl:template>
  <xsl:template match="xsl:include">
    <xsl:param name="src" select="'none'"/>
    <xsl:message>
include      <xsl:value-of select="@href"/>
    </xsl:message>
    <xsl:value-of select="concat('
',$src,' -> ')"/>
    <xsl:value-of select="concat('"',@href,'"')"/>
[label="(include)"]; 
<xsl:text> </xsl:text>
    <xsl:choose>
      <xsl:when test="following-sibling::*[self::xsl:include or
                      self::xsl:import][1]">
        <xsl:value-of select="' '"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="' '"/>
        </xsl:otherwise>
      </xsl:choose>
      <xsl:apply-templates
        select="document(@href)/xsl:stylesheet/*[self::xsl:include or
                self::xsl:import]"/>
  </xsl:template>
  <xsl:template match="xsl:import">
    <xsl:value-of select="substring-before(@href,'.')"/> [label="(import)"]
      <xsl:choose>
        <xsl:when test="following-sibling::*[self::xsl:include or
self::xsl:import][1]">
          <xsl:value-of select="'->'"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="';'"/>
        </xsl:otherwise>
      </xsl:choose>
    <xsl:apply-templates
      select="document(@href)/xsl:stylesheet/*[self::xsl:include or
              self::xsl:import]"/>
  </xsl:template>
  <xsl:template match="*">
    *****<xsl:value-of select="name(..)"/>/<xsl:value-of
select="name()"/>******
</xsl:template>
</xsl:stylesheet>
 | 
    
      | 2. | dependency map of stylesheets | 
      |  | Américo Albuquerque 
 > Does anyone know of a tool that can generate a dependency map
 > of a whole set of XSL's ? (i.e. which stylesheets import others, etc.)
 >
 > A tool that generated some kind of site map/tree of related
 > XSLs would be great as I'm trying to clean up and reign in
 > some 400 files with a view to finding common dependencies, etc.
 >
 
You could do that with xslt. 
Try these templates: 
  <xsl:template match="xsl:stylesheet">
    <xsl:text>Mappings
</xsl:text>
    <xsl:text>--+
</xsl:text>
    <xsl:text>  |
</xsl:text>
    <xsl:apply-templates select="*[self::xsl:include or self::xsl:import]"/>
    <xsl:text>
</xsl:text>
  </xsl:template>
  <xsl:template match="xsl:include">
    <xsl:param name="sep" select="'  '"/>
    <xsl:variable name="nxt">
      <xsl:choose>
        <xsl:when test="following-sibling::*[self::xsl:include or
self::xsl:import][1]">
          <xsl:value-of select="'|'"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="' '"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:value-of select="concat($sep,'|
')"/>
    <xsl:value-of select="concat($sep,'+-')"/>
    <xsl:value-of select="@href"/>
    <xsl:text> (include)</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:apply-templates
select="document(@href)/xsl:stylesheet/*[self::xsl:include or
self::xsl:import]">
      <xsl:with-param name="sep" select="concat($sep,$nxt,' ')"/>
    </xsl:apply-templates>
  </xsl:template>
  <xsl:template match="xsl:import">
    <xsl:param name="sep" select="'  '"/>
    <xsl:variable name="nxt">
      <xsl:choose>
        <xsl:when test="following-sibling::*[self::xsl:include or
self::xsl:import][1]">
          <xsl:value-of select="'|'"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="' '"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:value-of select="concat($sep,'|
')"/>
    <xsl:value-of select="concat($sep,'+-')"/>
    <xsl:value-of select="@href"/>
    <xsl:text> (import)</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:apply-templates
select="document(@href)/xsl:stylesheet/*[self::xsl:include or
self::xsl:import]">
      <xsl:with-param name="sep" select="concat($sep,$nxt,'  ')"/>
    </xsl:apply-templates>
  </xsl:template>
 |