<?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 equals "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 when the all option is used
                                            in the xsd schema             
      MMC       20110302   N/A            Modified so that when the Place_Keyword_Thesaurus equals "INCITS 31:2009", a new element is
                                           created: Place_INCITS. This was done so that more one place element could be used with the all
                                           option.
      MMC       20110302   N/A            Modified so that when the Place_Keyword_Thesaurus equals "INCITS 38:2009", a new element is
                                           created: Place_INCITSB. This was done so that more one place element could be used with the all
                                           option.
   
-->


<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>
<!-- /MIF/Theme_Keyword[1] /MIF/Place_Keyword[1]-->
<xsl:element name="PLaceTotal">

<xsl:variable name='newline'><xsl:text>
</xsl:text></xsl:variable>

<xsl:element name="Place_Keyword_Thesaurus">All the PlaceKeywords are listed here as a validation check</xsl:element>
<xsl:for-each select="/MIF/Place_Keyword">
<xsl:element name="Place_Keyword">
<xsl:apply-templates select="."/>
<xsl:value-of select="$newline"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
<!-- 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:variable name='newline'><xsl:text>
</xsl:text></xsl:variable>


<xsl:choose>
<xsl:when test="$PlaceType != 'INCITS 31:2009' and $PlaceType !=  'INCITS 38:2009' and $PlaceType != 'INCITS 446-2008'">
       <xsl:element name="Place">

          <xsl:for-each select="current-group()">
            <xsl:if test="name()='Place_Keyword_Thesaurus'">
              <xsl:copy>
                <xsl:apply-templates select="."/>
                <xsl:value-of select="$newline"/>
              </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:sort select="Place_Keyword" />    
             <xsl:comment>TEST!!!!!!!!!!!!!!!!!!</xsl:comment>
             <xsl:text>&#x0A;</xsl:text>
            <!--  <xsl:value-of select="$newline"/> 
            <xsl:value-of select="$newline"/> -->

                        
            
             <xsl:if test="name()='Place_Keyword'">
              <xsl:copy>
                <!-- xsl:apply-templates select="."/> -->
                      <xsl:text>&#x0A;</xsl:text>
                     <xsl:value-of  select="."/>
                  <xsl:text>&#x0A;</xsl:text>
                 <!-- <xsl:text>&#013;</xsl:text> -->
                 <!--  <xsl:value-of select="$newline"/> -->
              </xsl:copy>
            </xsl:if>
              <xsl:value-of select="$newline"/>
             
          </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:text>&#x0A;</xsl:text>
                <xsl:apply-templates select="."/>
                  <xsl:text>&#x0A;</xsl:text>
                <!-- <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:value-of select="$newline"/>
              </xsl:copy>
            </xsl:if>
          </xsl:for-each>
 
   <!--     </xsl:element>  -->
   <!--   </xsl:for-each-group> -->
 
  </xsl:element>
</xsl:when>

<xsl:when test="$PlaceType = 'INCITS 446-2008'">
      <xsl:element name="Place_INCITSC">

          <xsl:for-each select="current-group()">
            <xsl:if test="name()='Place_Keyword_Thesaurus'">
              <xsl:copy> 
                <xsl:text>&#x0A;</xsl:text>
                <xsl:apply-templates select="."/>
                 <xsl:text>&#x0A;</xsl:text>
                 <xsl:value-of select="$newline"/>
                <!-- <xsl:value-of select="#xD;"/> -->
               <xsl:text> </xsl:text>
              </xsl:copy>
            </xsl:if>
          </xsl:for-each>
          
            <xsl:text>&#x0A;</xsl:text>
          <xsl:for-each select="current-group()">
            <xsl:sort select="@gid2" data-type="number"/>
            <xsl:sort select="@gid2" data-type="text"/>
               <xsl:text>&#x0A;</xsl:text>
            <xsl:if test="name()='Place_Keyword'">
              <xsl:copy>
                  <xsl:text>&#x0A;</xsl:text>
                 <xsl:text>&#x0A;</xsl:text> 
                <xsl:apply-templates select="."/>
                 <xsl:text>&#x0A;</xsl:text>
                <xsl:text>&#x0A;</xsl:text> 
              </xsl:copy>
            </xsl:if>
          </xsl:for-each>


  </xsl:element>
</xsl:when>

<!-- <xsl:when test="$PlaceType = 'INCITS 446-2008'">
      <xsl:element name="Place_INCITSC">

          <xsl:for-each select="current-group()">
            <xsl:if test="name()='Place_Keyword_Thesaurus'">
              <xsl:copy>
                <xsl:apply-templates select="."/>
               <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: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 name="PLaceTotal">
<xsl:for-each select="MIF/Place_Keyword">
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:element> -->

</xsl:element>
</xsl:template>

<!-- <xsl:element name="PLaceTotal">
<xsl:foreach select="MIF/Place_Keyword">
<xsl:apply-templates select="."/>
</xsl:foreach>
</xsl:element>
 -->

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