<?xml version="1.0"?>
<!--
       '$RCSfile: getunits.xsl,v $'
       Copyright: 1997-2002 Regents of the University of California,
                            University of New Mexico, and
                            Arizona State University
        Sponsors: National Center for Ecological Analysis and Synthesis and
                  Partnership for Interdisciplinary Studies of Coastal Oceans,
                     University of California Santa Barbara
                  Long-Term Ecological Research Network Office,
                     University of New Mexico
                  Center for Environmental Studies, Arizona State University
   Other funding: National Science Foundation (see README for details)
                  The David and Lucile Packard Foundation
     For Details: http://knb.ecoinformatics.org/

        '$Author: obrien $'
          '$Date: 2008-08-27 21:30:05 $'
      '$Revision: 1.4 $'

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:stmml="http://www.xml-cml.org/schema/stmml-1.1"
                version="1.0">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
<root>
  <attributeUnitType>
    <xsl:for-each select="/stmml:unitList/unit">
      <xsl:call-template name="unit"/>
    </xsl:for-each>
  </attributeUnitType>

  <lengthUnits>
    <xsl:for-each select="/stmml:unitList/unitType">
      <xsl:if test="count(./dimension) = 1">
        <xsl:if test="./dimension/@name = 'length'">
          <xsl:if test="not(boolean(./dimension/@power))">

            <!--the name of the unitType with only a length dimension-->
            <xsl:variable name="unittypename">
              <xsl:value-of select="./@name"/>
            </xsl:variable>
            <!--go through each unit looking for the base unit-->
            <xsl:for-each select="//unit">
              <xsl:if test="./@unitType = $unittypename">
                <xsl:variable name="baseunit">
                  <xsl:value-of select="./@name"/>
                </xsl:variable>
                <!--list the base unit with dimension = length-->
                <xsl:call-template name="unit"/>
                <!--go through and get each unit derived from the base unit-->
                <xsl:for-each select="//unit">
                  <xsl:if test="./@parentSI=$baseunit">
                    <xsl:call-template name="unit"/>
                  </xsl:if>
                </xsl:for-each>
              </xsl:if>
            </xsl:for-each>
          </xsl:if>
        </xsl:if>
      </xsl:if>
    </xsl:for-each>
  </lengthUnits>

  <angleUnits>
    <xsl:for-each select="/stmml:unitList/unitType">
      <xsl:if test="count(./dimension) = 1">
        <xsl:if test="./dimension/@name = 'angle'">
          <!--the name of the unitType with only a length dimension-->
          <xsl:variable name="unittypename">
            <xsl:value-of select="./@name"/>
          </xsl:variable>
          <!--go through each unit looking for the base unit-->
          <xsl:for-each select="//unit">
            <xsl:if test="./@unitType = $unittypename">
              <xsl:variable name="baseunit">
                <xsl:value-of select="./@name"/>
              </xsl:variable>
              <!--list the base unit with dimension = length-->
              <xsl:call-template name="unit"/>
              <!--go through and get each unit derived from the base unit-->
              <xsl:for-each select="//unit">
                <xsl:if test="./@parentSI=$baseunit">
                  <xsl:call-template name="unit"/>
                </xsl:if>
              </xsl:for-each>
            </xsl:if>
          </xsl:for-each>
        </xsl:if>
      </xsl:if>
    </xsl:for-each>
  </angleUnits>
</root>
</xsl:template>

<xsl:template name="unit">
  <enumeration>
    <xsl:attribute name="value">
      <xsl:value-of select="./@name"/>
    </xsl:attribute>
  </enumeration>
</xsl:template>
</xsl:stylesheet>