<?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 whether to input ISO keywords
      MMC       20101221   N/A             Modifed the so that when the Theme_Keyword_Thesaurus equal "ISO 19115 Topic Categories"
                                            two new elements are created: Theme_ISO and Theme_Keyword_Thesaurus_ISO. This was done
                                            so that the ISO keywords could be verified in each metadata document. W3C standards do 
                                            not allow two elements with the same name with different types.             
-->


<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:variable name="ISO"> ISO 19115 Topic Categories  </xsl:variable>
            <!-- iso keywords --> 



        <xsl:for-each select="current-group()">
           
          <xsl:if test="name()='Theme_Keyword_Thesaurus'">
            <xsl:variable name="ISOA" select="."/>
           <xsl:choose>
              
            <xsl:when test= "$ISOA = 'ISO 19115 Topic Categories'">
                   <xsl:element name="Theme_ISO">
             <xsl:element name = "Theme_Keyword_Thesaurus_ISO">ISO 19115 Topic Categories</xsl:element><!-- uses this one -->
                 

              <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:when>


<xsl:when test= "$ISOA != 'ISO 19115 Topic Categories'">

<xsl:variable name='newline'><xsl:text>
</xsl:text></xsl:variable>
<!-- <xsl:text>&#10;</xsl:text> This is the carriage return-->
 <xsl:element name="Theme">
             <!-- uses this one -->
                <xsl:element name = "Theme_Keyword_Thesaurus"><xsl:value-of select="$ISOA"/> </xsl:element><!-- uses this one -->
                 <xsl:value-of select="$newline"/> 
             
              <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:when>




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


</xsl:for-each-group>


<!-- end of the ISO Keywords -->

      <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:for-each select="current-group()">

<xsl:if test="name()='Place_Keyword_Thesaurus'"> 
<xsl:variable name="PlaceType" select="."/>

<xsl:choose>
<xsl:when test="$PlaceType != 'INCITS 31:2009' and $PlaceType !=  'INCITS 38:2009'">
       <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:value-of select="$PlaceType"/> -->
      <!--  </xsl:element> -->
<!--      </xsl:for-each-group> -->

  </xsl:element><!--  <xsl:element name="Place"> --> 
 </xsl:when>


<xsl:when test="$PlaceType = 'INCITS 38:2009'">
      <xsl:element name="Place_INCITSB">

          <xsl:for-each select="current-group()">
            <xsl:if test="name()='Place_Keyword_Thesaurus'">
              <xsl:copy>
                <xsl:apply-templates select="."/>
                <!-- <xsl:value-of select="#xD;"/> -->
               <xsl:text> </xsl:text>
              </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:when>



<xsl:when test="$PlaceType = 'INCITS 31:2009'">
      <xsl:element name="Place_INCITS"> 
 
          <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:when>

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

<!-- end of new -->
</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>
-->
