article3.xsl

 


 <?xml version="1.0" encoding="ISO-8859-1"?>
 
 <xsl:stylesheet 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   version="1.0"
   >
   <xsl:output method="html"/> 
   <xsl:strip-space elements="SECT"/>
 
   <xsl:template match="/">
     <html><body>
        <xsl:apply-templates/>
     </body></html>
   </xsl:template>
 
   <xsl:template match="/ARTICLE/TITLE">
     <h1 align="center"> <xsl:apply-templates/> </h1>
   </xsl:template>
 

   <xsl:template match="/ARTICLE/SECT">
       <h2> <xsl:apply-templates select="text()|B|I|U|DEF|LINK"/> </h2>
       <xsl:apply-templates select="SECT|PARA|LIST|NOTE"/>
   </xsl:template>
     

   <xsl:template match="/ARTICLE/SECT/SECT">
       <h3> <xsl:apply-templates select="text()|B|I|U|DEF|LINK"/> </h3>
       <xsl:apply-templates select="SECT|PARA|LIST|NOTE"/>
   </xsl:template>
 

   <xsl:template match="/ARTICLE/SECT/SECT/SECT">
      <xsl:message terminate="yes">Error: Sections can only be nested 2 deep.</xsl:message>
   </xsl:template>
 
   <!-- Paragraph -->
   <xsl:template match="PARA">
     <p> <xsl:apply-templates select="text()|B|I|U|DEF|LINK"/> </p>
     <xsl:apply-templates select="PARA|LIST|NOTE"/>
   </xsl:template>
 
   <!-- Text -->
 <!-- 
   <xsl:template match="text()">
     <xsl:value-of select="normalize-space()"/>
   </xsl:template>
 -->
 
   <!-- LIST  -->
   <xsl:template match="LIST">
     <xsl:if test="@type='ordered'">
       <ol>
       <xsl:apply-templates/>
       </ol>
     </xsl:if>
     <xsl:if test="@type='unordered'">
       <ul>
       <xsl:apply-templates/>
       </ul>
     </xsl:if>
   </xsl:template>
 
   <!-- list ITEM -->
   <xsl:template match="ITEM">
     <li><xsl:apply-templates/>
     </li>
   </xsl:template>
 
   <xsl:template match="NOTE">
     <blockquote><b>Note:</b><br/>
       <xsl:apply-templates/>
     </blockquote>
   </xsl:template>
 
   <xsl:template match="DEF">
      <i> <xsl:apply-templates/> </i>   
   </xsl:template>
 
   <xsl:template match="B|I|U">
      <xsl:element name="{name()}">
        <xsl:apply-templates/>
      </xsl:element> 
   </xsl:template>
 
   <xsl:template match="LINK">
     <xsl:if test="@target">
       <!--Target attribute specified.-->
       <xsl:call-template name="htmLink">
         <xsl:with-param name="dest" select="@target"/>  <!--Destination = attribute value-->
       </xsl:call-template>
     </xsl:if>
 
     <xsl:if test="not(@target)">
       <!--Target attribute not specified.-->
       <xsl:call-template name="htmLink">
         <xsl:with-param name="dest">
           <xsl:apply-templates/>  <!--Destination value = text of node-->
         </xsl:with-param>
       </xsl:call-template>
     </xsl:if>
   </xsl:template>
 
   <!-- A named template that constructs an HTML link -->
   <xsl:template name="htmLink">
     <xsl:param name="dest" select="UNDEFINED"/> <!--default value-->
     <xsl:element name="a">
       <xsl:attribute name="href">
         <xsl:value-of select="$dest"/> <!--link target-->
       </xsl:attribute>
       <xsl:apply-templates/> <!--name of the link from text of node-->
     </xsl:element> 
   </xsl:template>
 
 </xsl:stylesheet>