<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
   Name:  IdentificationInformation.xsl
   Author:  James W. Allor
   Date:  20050906
   Description:  XSLT stylesheet that transforms the Identification Information
                 section of the GPMS from the MIF to the MRF.
                 Please reference the MIF Specification and the GPMS Table 1.
   Modification History:
      Initials  Date      Change Req. ID  Description
      JWA       20050906   N/A             Initial Version 
      JWA       20051027   N/A             Broke it into multiple templates; Removed match on MIF         
      JWA       20051109   N/A             Updated to reflect current MIF Spec..
      JWA       20060110   N/A             Updated to insert ISO and FW themes if missing.
      MMC       20070910   N/A             Eliminated framework themes and let the user decide ISO keywords
-->


<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="ISO-8859-1"/>


<xsl:template name="Identification_Information">

  <xsl:element name="Identification_Information">
 
    <xsl:call-template name="Citation"/>

    <xsl:call-template name="Description"/>

    <xsl:call-template name="Time_Period_of_Content"/>

    <xsl:call-template name="Status"/>

    <xsl:call-template name="Spatial_Domain"/>

    <xsl:call-template name="Keywords"/>
 
    <xsl:copy-of select="Access_Constraints"/>
    <xsl:copy-of select="Use_Constraints"/>
    <xsl:copy-of select="Title_13_Restrictions"/>


    <xsl:call-template name="Point_of_Contact"/>

    <xsl:call-template name="Browse_Graphic"/>

    <xsl:copy-of select="Data_Set_Character_Set"/>
    <xsl:copy-of select="Data_Set_Language"/>
    <xsl:copy-of select="Native_Data_Set_Environment"/>

    <xsl:call-template name="Cross_Reference"/>

  </xsl:element>

</xsl:template>

 
<xsl:template name="Citation">

  <xsl:element name="Citation">

    <xsl:for-each select="Originator[@section='citation']">
      <xsl:sort select="@gid1" data-type="number"/>
      <xsl:sort select="@gid1" data-type="text"/>
      <xsl:copy>
        <xsl:apply-templates select="."/>
      </xsl:copy>
    </xsl:for-each>

    <xsl:for-each select="Publication_Date[@section='citation'],
                          Title[@section='citation'],
                          Edition[@section='citation'],
                          Geospatial_Data_Presentation_Form[@section='citation']">
      <xsl:copy>
        <xsl:apply-templates select="."/>
      </xsl:copy>
    </xsl:for-each>

    <xsl:if test="Series_Name[@section='citation']">
      <xsl:element name="Series_Information">
        <xsl:for-each select="Series_Name[@section='citation'],
                              Issue_Identification[@section='citation']">
          <xsl:copy>
            <xsl:apply-templates select="."/>
          </xsl:copy>
        </xsl:for-each>
      </xsl:element>
    </xsl:if>

    <xsl:for-each select="Other_Citation_Details[@section='citation']">
      <xsl:copy>
        <xsl:apply-templates select="."/>
      </xsl:copy>
    </xsl:for-each>
   
    <xsl:for-each select="Online_Linkage[@section='citation']">
      <xsl:sort select="@gid1" data-type="number"/>
      <xsl:sort select="@gid1" data-type="text"/>
      <xsl:copy>
        <xsl:apply-templates select="."/>
      </xsl:copy>
    </xsl:for-each>

  </xsl:element>

</xsl:template>


<xsl:template name="Description">
  <xsl:element name="Description">
    <xsl:copy-of select="Abstract"/>
    <xsl:copy-of select="Purpose"/>
    <xsl:copy-of select="Subject_Entity"/>
    <xsl:copy-of select="Survey_Instance_Name"/>
    <xsl:copy-of select="Survey_Name"/>
    <xsl:copy-of select="Supplemental_Information"/>
  </xsl:element>
</xsl:template>


<xsl:template name="Time_Period_of_Content">

  <xsl:element name="Time_Period_of_Content">

    <xsl:for-each select="Beginning_Date[@section='time period of content'],
                          Ending_Date[@section='time period of content']">
      <xsl:copy>
        <xsl:apply-templates select="."/>
      </xsl:copy>
    </xsl:for-each>

    <xsl:copy-of select="Currentness_Reference"/>

  </xsl:element>

</xsl:template>


<xsl:template name="Status">
  <xsl:element name="Status">
    <xsl:copy-of select="Progress"/>
    <xsl:copy-of select="Maintenance_and_Update_Frequency"/>
  </xsl:element>
</xsl:template>


<xsl:template name="Spatial_Domain">

  <xsl:element name="Spatial_Domain">

    <xsl:copy-of select="West_Bounding_Coordinate"/>
    <xsl:copy-of select="East_Bounding_Coordinate"/>
    <xsl:copy-of select="North_Bounding_Coordinate"/>
    <xsl:copy-of select="South_Bounding_Coordinate"/>

    <xsl:for-each-group select="Outer_G-Ring, Exclusion_G-Ring"
                        group-by="@gid1">
      <xsl:sort select="current-grouping-key()" data-type="number"/>
      <xsl:sort select="current-grouping-key()" data-type="text"/>

      <xsl:element name="Data_Set_G-Polygon">

        <xsl:for-each select="current-group()">
          <xsl:copy>
            <xsl:apply-templates select="."/>
          </xsl:copy>
        </xsl:for-each>

      </xsl:element>

    </xsl:for-each-group>

  </xsl:element>

</xsl:template>


<xsl:template name="Keywords">
 
  <xsl:element name="Keywords">


    <xsl:for-each-group select="Theme_Keyword_Thesaurus, Theme_Keyword" group-by="@gid1">
      <xsl:sort select="current-grouping-key()" data-type="number"/>
      <xsl:sort select="current-grouping-key()" data-type="text"/>

      <xsl:element name="Theme">
       <!-- iso keywords --> 

<!-- <xsl:for-each select="current-group()">
          <xsl:if test="name()='Theme_Keyword_Thesaurus'">
           <xsl:if test ="Theme_Keyword_Thesaurus = 'ISO 19115 Topic Categories'">

            <xsl:copy>
              <xsl:apply-templates select="."/>
            </xsl:copy> -->
   
<!-- <xsl:for-each select="current-group()"> -->
         <!--  <xsl:if test="name()='Theme_Keyword'"> -->
         <!--  <xsl:if test ="Theme_Keyword = 'Boundaries'"> -->
           <!--  <xsl:copy>
              <xsl:apply-templates select="."/>
            </xsl:copy>
           </xsl:if> -->
         <!--  </xsl:if> -->
      <!--  </xsl:for-each> -->


    
                 
        <!--   </xsl:if>
          </xsl:if>
        </xsl:for-each> -->




        <xsl:for-each select="current-group()">
          <xsl:if test="name()='Theme_Keyword_Thesaurus'">

            <xsl:copy>
              <xsl:apply-templates select="."/>
            </xsl:copy>


          </xsl:if>
        </xsl:for-each>

        <xsl:for-each select="current-group()">
          <xsl:if test="name()='Theme_Keyword'">
            <xsl:copy>
              <xsl:apply-templates select="."/>
            </xsl:copy>
          </xsl:if>
        </xsl:for-each>

      </xsl:element>
    </xsl:for-each-group>

      <xsl:for-each-group select="Place_Keyword_Thesaurus, Place_Keyword"
                          group-by="@gid1">
        <xsl:sort select="current-grouping-key()" data-type="number"/>
        <xsl:sort select="current-grouping-key()" data-type="text"/>
        <xsl:element name="Place">

          <xsl:for-each select="current-group()">
            <xsl:if test="name()='Place_Keyword_Thesaurus'">
              <xsl:copy>
                <xsl:apply-templates select="."/>
              </xsl:copy>
            </xsl:if>
          </xsl:for-each>

          <xsl:for-each select="current-group()">
            <xsl:sort select="@gid2" data-type="number"/>
            <xsl:sort select="@gid2" data-type="text"/>
            <xsl:if test="name()='Place_Keyword'">
              <xsl:copy>
                <xsl:apply-templates select="."/>
              </xsl:copy>
            </xsl:if>
          </xsl:for-each>

        </xsl:element>
      </xsl:for-each-group>

  </xsl:element>

</xsl:template>


<xsl:template name="Point_of_Contact">

  <xsl:element name="Point_of_Contact">

    <xsl:for-each select="Contact_Organization[@section='point of contact']">
      <xsl:copy>
        <xsl:apply-templates select="."/>
      </xsl:copy>
    </xsl:for-each>

    <xsl:element name="Contact_Address">

      <xsl:for-each select="Address_Type[@section='point of contact']">
        <xsl:copy>
          <xsl:apply-templates select="."/>
        </xsl:copy>
      </xsl:for-each>

      <xsl:for-each select="Address[@section='point of contact']">
        <xsl:sort select="@gid1" data-type="number"/>
        <xsl:sort select="@gid1" data-type="text"/>
        <xsl:copy>
          <xsl:apply-templates select="."/>
        </xsl:copy>
      </xsl:for-each>

      <xsl:for-each select="City[@section='point of contact'],
                            State_or_Province[@section='point of contact'],
                            Postal_Code[@section='point of contact'],
                            Country[@section='point of contact']">

        <xsl:copy>
          <xsl:apply-templates select="."/>
        </xsl:copy>
      </xsl:for-each>

    </xsl:element>

    <xsl:for-each select="Contact_Voice_Telephone[@section='point of contact']">
      <xsl:sort select="@gid1" data-type="number"/>
      <xsl:sort select="@gid1" data-type="text"/>
      <xsl:copy>
        <xsl:apply-templates select="."/>
      </xsl:copy>
    </xsl:for-each>

    <xsl:for-each select="Contact_Facsimile_Telephone[@section='point of contact'],
                          Contact_Electronic_Mail_Address[@section='point of contact']">
      <xsl:copy>
        <xsl:apply-templates select="."/>
      </xsl:copy>
    </xsl:for-each>

  </xsl:element>

</xsl:template>


<xsl:template name="Browse_Graphic">

  <xsl:for-each-group select="Browse_Graphic_File_Name,
                              Browse_Graphic_File_Description,
                              Browse_Graphic_File_Type"
                      group-by="@gid1">
    <xsl:sort select="current-grouping-key()" data-type="number"/>
    <xsl:sort select="current-grouping-key()" data-type="text"/>

    <xsl:element name="Browse_Graphic">

      <xsl:for-each select="current-group()">
        <xsl:copy>
          <xsl:apply-templates select="."/>
        </xsl:copy>
      </xsl:for-each>

    </xsl:element>

  </xsl:for-each-group>

</xsl:template>


<xsl:template name="Cross_Reference">
 
    <xsl:for-each-group select="Originator[@section='cross reference'],
                                Publication_Date[@section='cross reference'],
                                Title[@section='cross reference'],
                                Online_Linkage[@section='cross reference']"
                        group-by="@gid1">
      <xsl:sort select="current-grouping-key()" data-type="number"/>
      <xsl:sort select="current-grouping-key()" data-type="text"/>

      <xsl:element name="Cross_Reference">

        <xsl:for-each select="current-group()">
          <xsl:sort select="@gid2" data-type="number"/>
          <xsl:sort select="@gid2" data-type="text"/>
          <xsl:if test="name()='Originator'">
            <xsl:copy>
              <xsl:apply-templates select="."/>
            </xsl:copy>
          </xsl:if>
        </xsl:for-each>

        <xsl:for-each select="current-group()">
          <xsl:if test="name()='Publication_Date'">
            <xsl:copy>
              <xsl:apply-templates select="."/>
            </xsl:copy>
          </xsl:if>
        </xsl:for-each>

        <xsl:for-each select="current-group()">
          <xsl:if test="name()='Title'">
            <xsl:copy>
              <xsl:apply-templates select="."/>
            </xsl:copy>
          </xsl:if>
        </xsl:for-each>

        <xsl:for-each select="current-group()">
          <xsl:sort select="@gid2" data-type="number"/>
          <xsl:sort select="@gid2" data-type="text"/>
          <xsl:if test="name()='Online_Linkage'">
            <xsl:copy>
              <xsl:apply-templates select="."/>
            </xsl:copy>
          </xsl:if>
        </xsl:for-each>

      </xsl:element>

    </xsl:for-each-group>

</xsl:template>



</xsl:stylesheet>


<!-- Stylus Studio meta-information - (c) 2004-2005. Progress Software Corporation. All rights reserved.
<metaInformation>
<scenarios/><MapperMetaTag><MapperInfo srcSchemaPathIsRelative="yes" srcSchemaInterpretAsXML="no" destSchemaPath="" destSchemaRoot="" destSchemaPathIsRelative="yes" destSchemaInterpretAsXML="no"/><MapperBlockPosition><template match="MIF"></template><template name="IdentificationInformation"></template></MapperBlockPosition></MapperMetaTag>
</metaInformation>
-->
