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

<!--
   Name: 14_gmd:dataQualityInfo.xsl 
   Author:  Matthew J. McCready
   Date:  20110601
   Description:  XSLT stylesheet that transforms Section 2 of an FGDC format file into the gmd:DQ_DataQuality section of  an ISO file. This stylesheet is called by 
   the csdgm2iso19115-2_master.xslt stylesheet. This template calls on the dateTimeTemp template, located in this stylesheet, and the DataQualitySource template, 
   located in the DataQualitySource.xsl stylesheet. The DataQualitySource template handles all the gmd:lineage information.
   Modification History:
      Initial   Date      Change Request ID   Description
      MMC		07/07/2011            Added the gmd:DQ_Scope, md:level and gmd:MD_ScopeCode elements to comply with the ISO standard.
      MMC               07/07/2011            Added the gmd:DQ_CompletenessCommission to one of the gmd:report elements
      MMC		07/08/2011            Created the dateTimeTemp template to work with dates and times for the gmd:dateTime element. This 
                                               element has to be in the MMDDYYYYT00:00:00 format, even when oly a year is given in the 
                                               /metadata/dataqual/lineage/procstep/procdate FGDC element. To correctly format this ISO element, a default -01-01 for 
                                               the month is inserted and all 0, for the time when only a year is given in the FGDC XML. 
      MMC               07/08/2011            Inserted the CI_Date package under the gmd:source/CI_Citation section. Previously, the gco:date element was not in this
                                               package.
-->


<!-- <xsl:import href="../IsoSchema/18_gmdTemplate1.xsl"/> -->

<!-- <xsl:include href="../IsoSchema/18_gmdTemplate1.xsl"/>
<xsl:import href="../IsoSchema/19_gmdTemplate2.xsl"/>
<xsl:import href="../IsoSchema/20_gmdTemplate3.xsl"/>
<xsl:import href="../IsoSchema/21_gmdTemplate4.xsl"/>
<xsl:import href="../IsoSchema/22_gmdFunctions.xsl"/> -->


<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" 
   xmlns:xlink="http://www.w3.org/1999/xlink"
>
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>



<xsl:template name="dataQualityInfo" match="/">
<xsl:element name="gmd:dataQualityInfo">
<xsl:element name="gmd:DQ_DataQuality">

<xsl:element name="gmd:scope">
<xsl:element name="gmd:DQ_Scope">

<xsl:element name="gmd:level">
<xsl:element name="gmd:MD_ScopeCode">
<xsl:attribute name="codeList">http://www.isotc211.org/2005/#gmdDQ_Scope</xsl:attribute>
<xsl:attribute name="codeListValue">dataset</xsl:attribute>
<xsl:attribute name="codeSpace">005</xsl:attribute>
dataset
 </xsl:element><!-- gmd:MD_ScopeCode -->
 </xsl:element><!-- gmd:level -->

</xsl:element><!-- gmd:DQ_Scope -->
 </xsl:element><!-- gmd:scope -->

<xsl:if test="/metadata/dataqual/posacc/horizpa">
<xsl:element name="gmd:report">

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

 <xsl:element name="gmd:nameOfMeasure">
<xsl:element name="gco:CharacterString">Horizontal Positional Accuracy</xsl:element> <!-- gco:CharacterString -->
</xsl:element> <!-- gmd:nameOfMeasure -->

<xsl:element name="gmd:measureDescription">
<xsl:element name="gco:CharacterString"><xsl:value-of select="/metadata/dataqual/posacc/horizpa/qhorizpa/horizpae"/> </xsl:element>
</xsl:element><!-- gmd:measureDescription -->

<xsl:element name="gmd:evaluationMethodDescription">
<xsl:element name="gco:CharacterString"><xsl:value-of select="/metadata/dataqual/posacc/horizpa/horizpar"/> </xsl:element> <!-- gco:CharacterString -->
</xsl:element> <!-- gmd:evaluationMethodDescription -->

 <xsl:element name="gmd:result">
 <xsl:element name="gmd:DQ_QuantitativeResult">

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

 <xsl:element name="gml:BaseUnit"> 

 <xsl:attribute name="gml:id">meters</xsl:attribute>
 <xsl:element name="gml:identifier">
<xsl:attribute name="codeSpace">meters </xsl:attribute> 
meters</xsl:element>

  <xsl:element name="gml:unitsSystem"> 
<xsl:attribute name="xlink:href">http://www.bipm.org/en/si/ </xsl:attribute> 
 </xsl:element>   <!-- gml:unitsSystem -->
         
  </xsl:element>  <!-- gml:BaseUnit -->
  </xsl:element>  <!-- gmd:valueUnit -->

  <xsl:element name="gmd:value">
<xsl:element name="gco:Record"><xsl:value-of select="/metadata/dataqual/posacc/horizpa/qhorizpa/horizpav"/> </xsl:element>  <!-- gco:Record -->
 </xsl:element>  <!-- gmd:value -->

 </xsl:element><!-- gmd:DQ_QuantitativeResult -->
 </xsl:element><!-- gmd:result -->

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

</xsl:element><!-- gmd:report -->
</xsl:if><!-- /metadata/dataqual/posacc/horizpa -->

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

<xsl:if test="/metadata/dataqual/complete">
<xsl:element name="gmd:report">
<xsl:element name="gmd:DQ_CompletenessOmission">

<xsl:element name="gmd:evaluationMethodDescription">
<xsl:element name="gco:CharacterString"><xsl:value-of select="/metadata/dataqual/complete"/></xsl:element> <!-- gco:CharacterString -->
</xsl:element><!-- gmd:evaluationMethodDescription -->

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


</xsl:element><!-- gmd:DQ_CompletenessOmission -->
</xsl:element><!-- gmd:report -->
</xsl:if><!-- /metadata/dataqual/complete -->

<xsl:if test="/metadata/dataqual/logic">
 <xsl:element name="gmd:report">

<xsl:element name="gmd:DQ_ConceptualConsistency">
<xsl:element name="gmd:measureDescription">
<xsl:element name="gco:CharacterString"><xsl:value-of select="/metadata/dataqual/logic"/></xsl:element> <!-- gco:CharacterString -->
</xsl:element><!-- gmd:measureDescription -->

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

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

</xsl:element><!-- gmd:report -->
</xsl:if><!-- /metadata/dataqual[1]/logic[1] -->

<xsl:element name="gmd:lineage">
<xsl:element name="gmd:LI_Lineage">
<xsl:element name="gmd:processStep">
<xsl:element name="gmd:LI_ProcessStep">

<xsl:element name="gmd:description">
<xsl:element name="gco:CharacterString"><xsl:value-of select="/metadata/dataqual/lineage/procstep/procdesc"/></xsl:element> <!-- gco:CharacterString -->
</xsl:element><!-- gmd:description -->

<xsl:element name="gmd:dateTime">
<xsl:comment> calling the "dateTimeTemp template for the first time</xsl:comment>
<xsl:call-template name="dateTimeTemp"/>

<!-- <xsl:element name="gco:DateTime"><xsl:value-of select="/metadata/dataqual/lineage/procstep/procdate"/>  </xsl:element>--><!-- gco:DateTime -->
</xsl:element><!-- gmd:dateTime -->

<xsl:element name="gmd:source">
<xsl:element name="gmd:LI_Source">
<xsl:element name="gmd:sourceCitation">
<xsl:element name="gmd:CI_Citation">
<xsl:element name="gmd:title">
<xsl:element name="gco:CharacterString"><xsl:value-of select="/metadata/dataqual/lineage/procstep/srcused"/></xsl:element> <!-- gco:CharacterString -->
</xsl:element><!-- gmd:title -->

<xsl:element name="gmd:date">
<xsl:element name="gmd:CI_Date">
<xsl:element name="gmd:date">
 <xsl:element name="gco:Date"><xsl:value-of select="/metadata/dataqual/lineage/procstep/procdate"/> </xsl:element> <!-- gco:Date -->
</xsl:element><!-- gmd:date -->
<xsl:comment> calling the "dateTimeTemp template for the second time</xsl:comment>
<!-- <xsl:call-template name="dateTimeTemp"/> -->
<!-- </xsl:element> --><!-- gmd:CI_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">revision</xsl:attribute>
<xsl:attribute name="codeSpace">003</xsl:attribute>
revision
 </xsl:element> <!-- gmd:CI_DateTypeCode -->
</xsl:element><!-- gmd:CI_Date -->
</xsl:element><!-- gmd:date -->

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

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

</xsl:element><!-- gmd:LI_ProcessStep -->
</xsl:element><!-- gmd:processStep -->
<xsl:comment> calling the DataQualitySource template</xsl:comment>
<xsl:call-template name="DataQualitySource"/>

</xsl:element><!-- gmd:LI_Lineage -->
</xsl:element><!-- gmd:lineage -->

</xsl:element><!-- gmd:DQ_DataQuality -->
</xsl:element><!-- gmd:dataQualityInfo -->

</xsl:template>

<xsl:template name="dateTimeTemp">
<xsl:comment> In the Template (dateTimeTemp) </xsl:comment>
<xsl:variable name ="ProcDate" select= "/metadata/dataqual/lineage/procstep/procdate"/>
<xsl:variable name ="ProcTime" select= "/metadata/dataqual/lineage/procstep/proctime"/>
<xsl:variable name="year"  select ="substring($ProcDate,1,4)"/>
<xsl:variable name="month" select ="substring($ProcDate,5,2)"/>
<xsl:variable name="monthLength" select="string-length($month)"/>
<xsl:variable name="day"   select ="substring($ProcDate,7,2)"/>
<xsl:variable name="dayLength" select="string-length($day)"/>

<!--  <xsl:choose>--> <!-- outer choose -->


<!-- <xsl:when test="/metadata/dataqual/lineage/procstep/procdate"> -->
<xsl:choose> <!-- inner choose -->
 <xsl:comment> no time!!!! </xsl:comment>
<xsl:when test="$dayLength>0">
<xsl:comment> Day (dateTimeTemp) </xsl:comment>
<xsl:variable name="dateFormat" select="concat($year, '-',$month,'-',$day)"/>
        <xsl:element name="gco:Date">
                <xsl:value-of select ="$dateFormat"/>
        </xsl:element>
</xsl:when>

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

<xsl:otherwise>
<xsl:comment> Last Resort(dateTimeTemp) </xsl:comment> 
<!-- YYYY-MM-DDThh:mm:ss -->
 <xsl:variable name="dateFormatA" select="concat($year,'-','01','-','01T00:00:00')"/>

        <xsl:element name="gco:DateTime">
             <xsl:comment> I hope this is correct!</xsl:comment>
                <xsl:value-of select ="$dateFormatA"/>
        </xsl:element>
<xsl:comment> End of Last Resort</xsl:comment>
</xsl:otherwise>
</xsl:choose><!-- inner choose -->
<!-- </xsl:when>




</xsl:choose> --> <!-- outer choose -->

<!-- </xsl:when> -->
</xsl:template>
</xsl:stylesheet>
