<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gmd="http://www.isotc211.org/2005/gmd"
    xmlns:gmi="http://www.isotc211.org/2005/gmi" xmlns:gmx="http://www.isotc211.org/2005/gmx"
    xmlns:gsr="http://www.isotc211.org/2005/gsr" xmlns:gss="http://www.isotc211.org/2005/gss"
    xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:gml="http://www.opengis.net/gml/3.2"
    xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:gfc="http://www.isotc211.org/2005/gfc" xmlns:vmf="http://www.altova.com/MapForce/UDF/vmf"
    xmlns:fn="http://www.w3.org/2005/xpath-functions"
    xmlns:grp="http://www.altova.com/Mapforce/grouping"
    xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
    exclude-result-prefixes="fn grp vmf xs xsi xsl xd" xmlns="http://www.isotc211.org/2005/gmi">
    <xd:doc scope="stylesheet">
        <xd:desc>
            <xd:p><xd:b>Created on:</xd:b> Jan 2, 2014</xd:p>
            <xd:p><xd:b>Author:</xd:b> mccre004</xd:p>
            <xd:p/>
        </xd:desc>
    </xd:doc>
    <xsl:template name="carrierOfCharacteristicsDefault">



        <xsl:for-each select="/MRF/Entity_and_Attribute_Information/Detailed_Description/Attribute">


            <xsl:element name="gfc:carrierOfCharacteristics">
                <xsl:element name="gfc:FC_FeatureAttribute">

                    <xsl:if test="./Attribute_Label">
                        <xsl:element name="gfc:memberName">
                            <xsl:element name="gco:LocalName">
                                <xsl:value-of select="./Attribute_Label"/>
                            </xsl:element>
                        </xsl:element>

                        <xsl:element name="gfc:definition">
                            <xsl:element name="gco:CharacterString">
                                <xsl:value-of select="./Attribute_Definition"/>
                            </xsl:element>
                        </xsl:element>

                        <xsl:element name="gfc:cardinality">
                            <xsl:attribute name="gco:nilReason">unknown</xsl:attribute>
                        </xsl:element>
                        <xsl:variable name="defSource" select="./Attribute_Definition_Source"/>
                        <xsl:choose>

                            <xsl:when test="contains($defSource,'Census')">
                                <xsl:element name="gfc:definitionReference">
                                    <xsl:attribute name="xlink:title">U.S. Census Bureau</xsl:attribute>
                                    <xsl:attribute name="xlink:href"
                                        >http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4</xsl:attribute>
                                </xsl:element>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:element name="gfc:definitionReference">
                                    <xsl:element name="gfc:FC_DefinitionReference">
                                        <xsl:element name="gfc:definitionSource">
                                            <xsl:element name="gfc:FC_DefinitionSource">
                                                <xsl:element name="gfc:source">
                                                  <xsl:element name="gmd:CI_Citation">

                                                  <xsl:element name="gmd:title">
                                                  <xsl:attribute name="gco:nilReason"
                                                  >inapplicable</xsl:attribute>
                                                  </xsl:element>

                                                  <xsl:element name="gmd:date">
                                                  <xsl:attribute name="gco:nilReason"
                                                  >unknown</xsl:attribute>
                                                  </xsl:element>

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

                                                  <xsl:element name="gmd:organisationName">
                                                     <!-- <xsl:comment>This is the Organization!!!!</xsl:comment>--> <xsl:element name="gco:CharacterString"><xsl:value-of select="./Attribute_Definition_Source"/> </xsl:element>
                                                  </xsl:element>

                                                  <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>
                                                  <xsl:attribute name="codeListValue"
                                                  >resourceProvider</xsl:attribute>
                                                  <xsl:attribute name="codeSpace"
                                                  >001</xsl:attribute>resourceProvider
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                </xsl:element>
                                            </xsl:element>
                                        </xsl:element>
                                    </xsl:element>
                                </xsl:element>
                            </xsl:otherwise>
                        </xsl:choose>

                        <!-- <xsl:choose>
    <xsl:when test="./Attribute_Domain_Values/Codeset_Domain"></xsl:when>
</xsl:choose> -->
                        <xsl:for-each select="./Attribute_Domain_Values/Codeset_Domain">
                            <xsl:element name="gfc:listedValue">

                                <xsl:element name="gfc:FC_ListedValue">
                                    <xsl:element name="gfc:label">
                                        <xsl:element name="gco:CharacterString">
                                            <xsl:value-of select="./Codeset_Name"/>
                                        </xsl:element>
                                    </xsl:element>

                                    <xsl:variable name="defSourceCodeset" select="./Codeset_Source"/>
                                    <xsl:choose>

                                        <xsl:when test="contains($defSourceCodeset,'Census')">
                                            <xsl:element name="gfc:definitionReference">
                                                <xsl:attribute name="xlink:title">U.S. Census Bureau</xsl:attribute>
                                                <xsl:attribute name="xlink:href"
                                                  >http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4</xsl:attribute>
                                            </xsl:element>
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <xsl:element name="gfc:definitionReference">
                                                <xsl:element name="gfc:FC_DefinitionReference">
                                                  <xsl:element name="gfc:definitionSource">
                                                  <xsl:element name="gfc:FC_DefinitionSource">
                                                  <xsl:element name="gfc:source">
                                                  <xsl:element name="gmd:CI_Citation">

                                                  <xsl:element name="gmd:title">
                                                  <xsl:attribute name="gco:nilReason"
                                                  >inapplicable</xsl:attribute>
                                                  </xsl:element>

                                                  <xsl:element name="gmd:date">
                                                  <xsl:attribute name="gco:nilReason"
                                                  >unknown</xsl:attribute>
                                                  </xsl:element>

                                                  <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="./Codeset_Source"/> </xsl:element>
                                                  </xsl:element>

                                                  <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>
                                                  <xsl:attribute name="codeListValue"
                                                  >resourceProvider</xsl:attribute>
                                                  <xsl:attribute name="codeSpace"
                                                  >001</xsl:attribute>resourceProvider
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                </xsl:element>
                                            </xsl:element>
                                        </xsl:otherwise>
                                    </xsl:choose>
                                </xsl:element>
                            </xsl:element>
                        </xsl:for-each>



                        <!--  <xsl:comment> preRangeDomain</xsl:comment>square meters -->
                        <xsl:for-each select="./Attribute_Domain_Values/Range_Domain">

                            <xsl:if test="./Attribute_Units_of_Measure">
                                <xsl:variable name="unitOfMeasuere"
                                    select="./Attribute_Units_of_Measure"/>
                              
                                <xsl:choose>
                                    <xsl:when test="contains($unitOfMeasuere,'square meters')">
                                        <xsl:variable name="attLabel" select="../../Attribute_Label"/>
                                        <xsl:variable name="finalId" select="concat('areaInMetersSquaredfor',$attLabel)"/>
                                        <xsl:element name="gfc:valueMeasurementUnit">
                                            <xsl:element name="gml:DerivedUnit">
                                                <xsl:attribute name="gml:id"><xsl:value-of select="$finalId"/></xsl:attribute>

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

                                                <xsl:element name="gml:derivationUnitTerm">
                                                  <xsl:attribute name="uom">m</xsl:attribute>
                                                  <xsl:attribute name="exponent">2</xsl:attribute>
                                                </xsl:element>

                                            </xsl:element>
                                        </xsl:element>
                                    </xsl:when>
                                   <!-- <xsl:when test="contains($unitOfMeasuere,'Decimal degrees')">
                                        <xsl:element name="gfc:valueMeasurementUnit">
                                            </xsl:element>
                                    </xsl:when> -->
                                    <xsl:when test="contains($unitOfMeasuere,'degree')">
                                        <xsl:comment>Do the following to convert from decimal degrees to degree minutes and seconds 
                                            1. The whole units of degrees will remain the same
                                            2. Multiply the decimal by 60 
                                            3. The whole number becomes the minutes 
                                            4. Take the remaining decimal and multiply by 60
                                            5. The resulting number becomes the seconds  Seconds can remain as a decimal.
                                            6. Take your three sets of numbers and put them together, using the symbols for degrees  minutes  and seconds 
                                        </xsl:comment>
                                        <xsl:element name="gfc:valueMeasurementUnit">
                                            <xsl:element name="gml:BaseUnit">
                                                <xsl:attribute name="gml:id">
                                                    <xsl:value-of select="../../Attribute_Label"/>
                                                </xsl:attribute>
                                                <xsl:element name="gml:identifier">
                                                    <xsl:attribute name="codeSpace">
                                                        <xsl:value-of select="../../Attribute_Label"/>
                                                    </xsl:attribute>
                                                    <xsl:value-of
                                                        select="./Attribute_Units_of_Measure"/>
                                                </xsl:element>
                                                <xsl:element name="gml:unitsSystem">
                                                    <xsl:attribute name="xlink:href"
                                                        >http://www.bipm.org/en/si/si_brochure/chapter4/table6.html</xsl:attribute>
                                                </xsl:element>
                                            </xsl:element>
                                            </xsl:element>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <xsl:element name="gfc:valueMeasurementUnit">
                                            <xsl:element name="gml:BaseUnit">
                                                <!-- /MRF/Entity_and_Attribute_Information[1]/Detailed_Description[1]/Attribute[6]/Attribute_Domain_Values[1]/Range_Domain[1] -->
                                                <!-- /MRF/Entity_and_Attribute_Information[1]/Detailed_Description[1]/Attribute[5]/Attribute_Label[1] -->
                                                <xsl:attribute name="gml:id">
                                                  <xsl:value-of select="../../Attribute_Label"/>
                                                </xsl:attribute>
                                                <xsl:element name="gml:identifier">
                                                  <xsl:attribute name="codeSpace">
                                                  <xsl:value-of select="../../Attribute_Label"/>
                                                  </xsl:attribute>
                                                  <xsl:value-of
                                                  select="./Attribute_Units_of_Measure"/>
                                                </xsl:element>
                                                <xsl:element name="gml:unitsSystem">
                                                  <xsl:attribute name="xlink:href"
                                                  >http://www.bipm.org/en/si/base_units/</xsl:attribute>
                                                </xsl:element>
                                            </xsl:element>
                                        </xsl:element>
                                    </xsl:otherwise>
                                </xsl:choose>
                            </xsl:if>


                            <xsl:element name="gfc:listedValue">
                                <xsl:element name="gfc:FC_ListedValue">

                                    <xsl:element name="gfc:label">
                                        <xsl:attribute name="gco:nilReason"
                                            >inapplicable</xsl:attribute>
                                    </xsl:element>

                                    <xsl:element name="gfc:definition">
                                        <xsl:element name="gco:CharacterString">
                                            Range Domain Minimum: <xsl:value-of select="./Range_Domain_Minimum"/>
                                            Range Domain Maximum: <xsl:value-of  select="./Range_Domain_Maximum"/>
                                        </xsl:element>
                                    </xsl:element>

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



                        </xsl:for-each>

                        <xsl:for-each select="./Attribute_Domain_Values/Enumerated_Domain">
                            <!-- <xsl:comment>In the enumerated domain!!!!!!!</xsl:comment> -->
                            <xsl:element name="gfc:listedValue">
                                <xsl:element name="gfc:FC_ListedValue">

                                    <xsl:element name="gfc:label">
                                        <xsl:element name="gco:CharacterString">
                                            <xsl:value-of select="./Enumerated_Domain_Value"/>
                                        </xsl:element>
                                    </xsl:element>

                                    <xsl:element name="gfc:definition">
                                        <xsl:element name="gco:CharacterString">
                                            <xsl:value-of
                                                select="./Enumerated_Domain_Value_Definition"/>
                                        </xsl:element>
                                    </xsl:element>

                                    <xsl:variable name="defSourceEnumDom"
                                        select="./Enumerated_Domain_Value_Definition_Source"/>
                                    <xsl:choose>

                                        <xsl:when test="contains($defSourceEnumDom,'Census')">
                                            <xsl:element name="gfc:definitionReference">
                                                <xsl:attribute name="xlink:title">U.S. Census Bureau</xsl:attribute>
                                                <xsl:attribute name="xlink:href"
                                                  >http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4</xsl:attribute>
                                            </xsl:element>
                                        </xsl:when>
                                        <xsl:otherwise>
                                             <!-- <xsl:comment> right here!!!!!!!</xsl:comment> -->
                                            <xsl:element name="gfc:definitionReference">
                                                <xsl:element name="gfc:FC_DefinitionReference">
                                                <xsl:element name="gfc:definitionSource">
                                                  <xsl:element name="gfc:FC_DefinitionSource">
                                                  <xsl:element name="gfc:source">
                                                  <xsl:element name="gmd:CI_Citation">

                                                  <xsl:element name="gmd:title">
                                                  <xsl:attribute name="gco:nilReason"
                                                  >inapplicable</xsl:attribute>
                                                  </xsl:element>

                                                  <xsl:element name="gmd:date">
                                                  <xsl:attribute name="gco:nilReason"
                                                  >unknown</xsl:attribute>
                                                  </xsl:element>

                                                  <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="./Enumerated_Domain_Value_Definition_Source"/> </xsl:element>
                                                  </xsl:element>

                                                  <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>
                                                  <xsl:attribute name="codeListValue"
                                                  >resourceProvider</xsl:attribute>
                                                  <xsl:attribute name="codeSpace"
                                                  >001</xsl:attribute>resourceProvider
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                  </xsl:element>
                                                </xsl:element>
                                                </xsl:element>
                                                </xsl:element>
                                        </xsl:otherwise>
                                    </xsl:choose>

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

                        </xsl:for-each>

                        <xsl:if test="./Attribute_Domain_Values/Unrepresentable_Domain">



                            <xsl:element name="gfc:listedValue">
                                <xsl:element name="gfc:FC_ListedValue">

                                    <xsl:element name="gfc:label">
                                        <xsl:attribute name="gco:nilReason"
                                            >inapplicable</xsl:attribute>
                                    </xsl:element>

                                    <xsl:element name="gfc:definition">
                                        <xsl:element name="gco:CharacterString">
                                            <xsl:value-of
                                                select="./Attribute_Domain_Values/Unrepresentable_Domain"
                                            />
                                        </xsl:element>
                                    </xsl:element>
                                </xsl:element>
                            </xsl:element>
                        </xsl:if>

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

        </xsl:for-each>

    </xsl:template>




</xsl:stylesheet>
