<?xml version="1.0" encoding="UTF-8" ?>

<!--
   Name:  DataQualitySource.xsl 
   Author:  Matthew J. McCready
   Date:  20110701
   Description:  Stylesheet that transforms the DataQuality's Lineage Information into the ISO gmd:source element.
   This template is called by the 14_gmd:dataQualityInfo.xsl stylesheet
   Modification History:
      Initial   Date      Change Request ID   Description

-->

<xsl:stylesheet version = "1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:gmd="http://www.isotc211.org/2005/gmd"
   xmlns:gco="http://www.isotc211.org/2005/gco" 
   xmlns:gml="http://www.opengis.net/gml/3.2"
>
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
<xsl:variable name ="MetDate"   select= "//metadata/metainfo/metd"/>
<!-- <xsl:variable name="SDTSPntVot" select="//metadata/spdoinfo/ptvctinf/sdtsterm/sdtstype"/> -->


<xsl:template name="DataQualitySource" match="/metadata/dataqual/lineage/srcinfo" >
<!-- /metadata/dataqual[1]/lineage[1]/srcinfo[1] 
/metadata/dataqual[1]/lineage[1]/srcinfo[2]/srccontr[1]
-->

<xsl:for-each select="/metadata/dataqual/lineage/srcinfo">

<xsl:element name="gmd:source">
<xsl:element name="gmd:LI_Source">

<xsl:element name="gmd:description">
<xsl:element name="gco:CharacterString"><xsl:value-of select="srccontr"/>

<xsl:if test="typesrc">
<xsl:variable name="typesrc" select="typesrc"/>
<xsl:if test="$typesrc != 'Unknown'">

<xsl:choose>
<xsl:when test="$typesrc = 'Internet Download'">
This was deliveried via <xsl:value-of select="typesrc"/>. 
</xsl:when>
<xsl:when test="$typesrc = 'online'">
This was deliveried <xsl:value-of select="typesrc"/>.
</xsl:when>

<xsl:otherwise>
This was deliveried on <xsl:value-of select="typesrc"/>.
</xsl:otherwise>
</xsl:choose>

</xsl:if>
</xsl:if>

</xsl:element> <!-- gco:CharacterString -->
</xsl:element> <!-- gmd:description -->

<xsl:if test="srcscale">
<xsl:element name="gmd:scaleDenominator">
<xsl:element name="gmd:MD_RepresentativeFraction">

<xsl:element name="gmd:denominator">
<xsl:element name="gco:Integer"><xsl:value-of select="srcscale"/></xsl:element> <!-- gco:Integer -->
</xsl:element> <!-- gmd:denominator --> 

</xsl:element> <!-- gmd:MD_RepresentativeFraction -->
</xsl:element> <!-- gmd:scaleDenominator -->
</xsl:if>

<xsl:element name="gmd:sourceCitation">
<xsl:element name="gmd:CI_Citation">

<xsl:element name="gmd:title">
<!-- /metadata/dataqual[1]/lineage[1]/srcinfo[1]/srccite[1]/citeinfo[1]/title[1] -->
<xsl:element name="gco:CharacterString"><xsl:value-of select="srccite/citeinfo/title "/></xsl:element> <!-- gco:CharacterString -->
</xsl:element> <!-- gmd:title -->

<xsl:if test="srccitea">
<xsl:element name="gmd:alternateTitle">
<xsl:element name="gco:CharacterString"><xsl:value-of select="srccitea"/></xsl:element> <!-- gco:CharacterString -->
</xsl:element> <!-- gmd:alternateTitle -->
</xsl:if>

<xsl:element name="gmd:date">
<xsl:element name="gmd:CI_Date">

<!-- <xsl:element name="gmd:date"> -->
<xsl:variable name="pubDate" select="srccite/citeinfo/pubdate"/>

<xsl:choose>

<xsl:when test="$pubDate ='unpublished material'">
<xsl:element name="gmd:date">
<xsl:attribute name="gco:nilReason">unpublished material</xsl:attribute>
</xsl:element>
</xsl:when>

<xsl:when test="$pubDate ='Unknown'">
<xsl:element name="gmd:date">
<xsl:attribute name="gco:nilReason">unknown date</xsl:attribute>
</xsl:element>
</xsl:when>


<xsl:otherwise>

 
<xsl:variable name="year"        select="substring($pubDate,1,4)"/>
<xsl:variable name="month"       select ="substring($pubDate,5,2)"/>
<xsl:variable name="day"         select ="substring($pubDate,7,2)"/>
<xsl:variable name="dayLength"   select="string-length($day)"/>
<xsl:variable name="monthLength" select="string-length($month)"/>


 
<xsl:variable name="dateFormat" select="concat($year, '-',$month,'-',$day)"/>

<xsl:choose>
<xsl:when test="$dayLength>0">

<xsl:variable name="dateFormat" select="concat($year, '-',$month,'-',$day)"/>
        <xsl:element name="gmd:date">
        <xsl:element name="gco:Date">
                <xsl:value-of select ="$dateFormat"/>
        </xsl:element>
</xsl:element>
</xsl:when>

<xsl:when test="$monthLength >0">
<xsl:variable name="dateFormat" select="concat($year, '-',$month)"/>
         <xsl:element name="gmd:date">
        <xsl:element name="gco:Date">
                <xsl:value-of select ="$dateFormat"/>
        </xsl:element>
         </xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="dateFormat" select="$year"/>
         <xsl:element name="gmd:date">
        <xsl:element name="gco:Date">
                <xsl:value-of select ="$dateFormat"/>
        </xsl:element>
         </xsl:element>

</xsl:otherwise>

</xsl:choose>



</xsl:otherwise>

</xsl:choose>

<!--  </xsl:element> --> <!-- gmd:date -->

<xsl:element name="gmd:dateType">
<xsl:element name="gmd:CI_DateTypeCode">
<xsl:attribute name="codeList">http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode</xsl:attribute>
<xsl:attribute name="codeListValue">publication</xsl:attribute>
<xsl:attribute name="codeSpace">002</xsl:attribute>
publication
</xsl:element> <!-- gmd:CI_DateTypeCode -->
</xsl:element> <!-- gmd:dateType -->

</xsl:element> <!-- gmd:CI_Date -->
</xsl:element> <!-- gmd:date -->

<xsl:if test="srccite/citeinfo/edition">
<xsl:element name="gmd:edition"><xsl:value-of select="srccite/citeinfo/edition"/></xsl:element> <!-- gmd:edition -->
</xsl:if> 

<xsl:element name="gmd:citedResponsibleParty">
<xsl:element name="gmd:CI_ResponsibleParty">

<xsl:element name="gmd:organisationName">
<xsl:element name="gco:CharacterString">
<xsl:value-of select="srccite/citeinfo/origin"/>
</xsl:element> <!-- gco:CharacterString -->
</xsl:element> <!-- gmd:organisationName -->

<xsl:element name="gmd:role">

<xsl:element name="gmd:CI_RoleCode">
<xsl:attribute name="codeList">http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode</xsl:attribute>
<!-- resourceProvider -->
<xsl:attribute name="codeListValue">resourceProvider</xsl:attribute>
<xsl:attribute name="codeSpace">001</xsl:attribute>
resourceProvider
</xsl:element> <!-- gmd:CI_RoleCode -->
</xsl:element> <!-- gmd:role -->

</xsl:element> <!-- gmd:CI_ResponsibleParty -->
</xsl:element> <!-- gmd:citedResponsibleParty -->

<xsl:element name="gmd:presentationForm">
<xsl:element name="gmd:CI_PresentationFormCode">
<xsl:attribute name="codeList">http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_PresentationFormCode</xsl:attribute>
<xsl:attribute name="codeListValue">mapDigital</xsl:attribute>
<xsl:attribute name="codeSpace">005</xsl:attribute>
mapDigital
</xsl:element> <!-- gmd:CI_PresentationFormCode -->
</xsl:element> <!-- gmd:presentationForm -->

<!-- /metadata/dataqual/lineage/srcinfo -->
<xsl:if test="srccite/citeinfo/serinfo">
<xsl:element name="gmd:series">
<xsl:element name="gmd:CI_Series">

<xsl:element name="gmd:name">
<xsl:element name="gco:CharacterString"><xsl:value-of select="srccite/citeinfo/serinfo/sername"/></xsl:element> <!-- gco:CharacterString -->
</xsl:element> <!-- gmd:name -->

<xsl:element name="gmd:issueIdentification">
<xsl:element name="gco:CharacterString"><xsl:value-of select="srccite/citeinfo/serinfo/issue"/></xsl:element> <!-- gco:CharacterString -->
</xsl:element> <!-- gmd:issueIdentification -->


</xsl:element> <!-- gmd:CI_Series -->
</xsl:element> <!-- gmd:series -->
 </xsl:if> 

<xsl:if test="srccite/citeinfo/othercit">
<xsl:element name="gmd:otherCitationDetails">
<xsl:element name="gco:CharacterString"><xsl:value-of select="srccite/citeinfo/othercit"/></xsl:element> <!-- gco:CharacterString -->
</xsl:element> <!-- gmd:otherCitationDetails -->
</xsl:if>

</xsl:element> <!-- gmd:CI_Citation -->
</xsl:element> <!-- gmd:sourceCitation -->

<xsl:element name="gmd:sourceExtent">
<xsl:element name="gmd:EX_Extent">
<xsl:element name="gmd:temporalElement">
<xsl:element name="gmd:EX_TemporalExtent">

<xsl:element name="gmd:extent">
<xsl:attribute name="gco:nilReason">unknown</xsl:attribute>
</xsl:element> <!-- gmd:extent -->

<xsl:element name="gml:TimePeriod">
<!-- <xsl:comment> This is the correct time period</xsl:comment> -->
<xsl:attribute name="gml:id">sourceTemporalExtent</xsl:attribute>
<xsl:element name="gml:description"><xsl:value-of select="srctime/srccurr"/></xsl:element>
<xsl:variable name="BegDate" select="srctime/timeinfo/rngdates/begdate"/>
<xsl:variable name="EndDate" select="srctime/timeinfo/rngdates/enddate"/>

<xsl:choose>
<xsl:when test="$BegDate ='Unknown' and $EndDate='Unknown'">
<xsl:element name="gml:timePosition">

<xsl:attribute name="indeterminatePosition">
<xsl:value-of select="srctime/timeinfo/rngdates/begdate"/>
</xsl:attribute>

</xsl:element><!-- indeterminatePosition --> 
</xsl:when>
<xsl:otherwise>

<xsl:call-template name="begDateFormat"/>
<xsl:call-template name="endDateFormat"/>
</xsl:otherwise>
</xsl:choose>

</xsl:element> <!-- gml:TimePeriod -->

</xsl:element> <!-- gmd:EX_TemporalExtent -->
</xsl:element> <!-- gmd:temporalElement -->
</xsl:element> <!-- gmd:EX_Extent -->
</xsl:element> <!-- gmd:sourceExtent -->

</xsl:element> <!-- gmd:LI_Source -->
</xsl:element> <!-- gmd:source -->

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

<xsl:template name="begDateFormat">
<xsl:variable name="BegDate" select="srctime/timeinfo/rngdates/begdate"/>
<xsl:variable name="BegYear"  select ="substring($BegDate,1,4)"/>
<xsl:variable name="BegMonth" select ="substring($BegDate,5,2)"/>
<xsl:variable name="BegMonthLength" select="string-length($BegMonth)"/>
<xsl:variable name="BegDay"   select ="substring($BegDate,7,2)"/>
<xsl:variable name="BegDayLength" select="string-length($BegDay)"/>

<xsl:choose>

<xsl:when test="$BegDayLength>0">
<xsl:variable name="dateFormat" select="concat($BegYear, '-',$BegMonth,'-',$BegDay)"/>
<xsl:element name="gml:beginPosition"><xsl:value-of select="$dateFormat"/></xsl:element><!-- gml:beginPosition -->
</xsl:when>

<xsl:when test="$BegMonthLength >0">
<xsl:variable name="dateFormat" select="concat($BegYear, '-',$BegMonth)"/>
<xsl:element name="gml:beginPosition"><xsl:value-of select="$dateFormat"/></xsl:element><!-- gml:beginPosition -->
</xsl:when>

<xsl:otherwise>
<xsl:variable name="dateFormat" select="$BegYear"/>
<xsl:element name="gml:beginPosition"><xsl:value-of select="$dateFormat"/></xsl:element><!-- gml:beginPosition -->
</xsl:otherwise>
</xsl:choose>

</xsl:template>


<xsl:template name="endDateFormat">
<xsl:variable name="EndDate" select="srctime/timeinfo/rngdates/enddate"/>
<xsl:variable name="EndYear"  select ="substring($EndDate,1,4)"/>
<xsl:variable name="EndMonth" select ="substring($EndDate,5,2)"/>
<xsl:variable name="EndMonthLength" select="string-length($EndMonth)"/>
<xsl:variable name="EndDay"   select ="substring($EndDate,7,2)"/>
<xsl:variable name="EndDayLength" select="string-length($EndDay)"/>

<xsl:choose>

<xsl:when test="$EndDayLength>0">
<xsl:variable name="dateFormat" select="concat($EndYear, '-',$EndMonth,'-',$EndDay)"/>
<xsl:element name="gml:endPosition"><xsl:value-of select="$dateFormat"/></xsl:element><!-- gml:beginPosition -->
</xsl:when>

<xsl:when test="$EndMonthLength >0">
<xsl:variable name="dateFormat" select="concat($EndYear, '-',$EndMonth)"/>
<xsl:element name="gml:endPosition"><xsl:value-of select="$dateFormat"/></xsl:element><!-- gml:beginPosition -->
</xsl:when>

<xsl:otherwise>
<xsl:variable name="dateFormat" select="$EndYear"/>
<xsl:element name="gml:endPosition"><xsl:value-of select="$dateFormat"/></xsl:element><!-- gml:beginPosition -->
</xsl:otherwise>
</xsl:choose>

</xsl:template>

</xsl:stylesheet>
