]> Wikimedia Canada | Git repositories - eccc_to_commons.git/commitdiff
Rewrite almanach merge logic master
authorPierre Choffet <peuc@wanadoo.fr>
Tue, 25 May 2021 22:12:31 +0000 (18:12 -0400)
committerPierre Choffet <peuc@wanadoo.fr>
Tue, 25 May 2021 22:12:31 +0000 (18:12 -0400)
Partial input/merge files use was flawed: missing days were triggering errors.
Some traps were added to make sure we won't generate files with unexpected corner cases.

eccc_merger_almanach.xslt

index 38db64e4233f93ad0e27b25ba5f5aeb664778d87..0f70b050a6341f97d5e5ab8a73beeaed5d3b419d 100644 (file)
                <xsl:variable name="merge-extreme-max" select="$merge-doc/climatedata/month[@index = $month]/day[@index = $day]/temperature[@class = 'extremeMax']" />
                
                <xsl:choose>
-                       <xsl:when test="$input-extreme-max and (not($merge-extreme-max) or $input-extreme-max/text() &gt;= $merge-extreme-max/text())">
+                       <!--    Both nodes values are numeric and input value is greater or equal than merge
+                            or Input exists but merge doesn't or is not numeric
+                       -->
+                       <xsl:when test="(string(number($input-extreme-max)) != 'NaN' and string(number($merge-extreme-max) != 'NaN') and $input-extreme-max &gt;= $merge-extreme-max) or ($input-extreme-max and (string(number($merge-extreme-max)) = 'NaN'))">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-extreme-max/@*" />
                                        <xsl:apply-templates select="$input-extreme-max/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:otherwise>
+                       <!--    Both nodes values are numeric and input value is lesser than merge
+                            or Input doesn't exist or is not numeric but merge does
+                       -->
+                       <xsl:when test="(string(number($input-extreme-max)) != 'NaN' and string(number($merge-extreme-max) != 'NaN') and $input-extreme-max &lt; $merge-extreme-max) or ((string(number($input-extreme-max)) = 'NaN') and $merge-extreme-max)">
                                <xsl:copy>
                                        <xsl:apply-templates select="$merge-extreme-max/@*" />
                                        <xsl:apply-templates select="$merge-extreme-max/node()" />
                                </xsl:copy>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="concat($month, '-', $day, ' - extremeMax ', number($input-extreme-max), ' ', number($merge-extreme-max))" />
+                               </xsl:message>
+                               <xsl:message terminate="yes">Trapping case not supposed to happen.</xsl:message>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
                <xsl:variable name="merge-extreme-min" select="$merge-doc/climatedata/month[@index = $month]/day[@index = $day]/temperature[@class = 'extremeMin']" />
                
                <xsl:choose>
-                       <xsl:when test="$input-extreme-min and (not($merge-extreme-min) or $input-extreme-min/text() &lt;= merge-extreme-min/text())">
+                       <!--    Both nodes values are numeric and input value is lesser or equal than merge
+                            or Input exists but merge doesn't or is not numeric
+                       -->
+                       <xsl:when test="(string(number($input-extreme-min)) != 'NaN' and string(number($merge-extreme-min) != 'NaN') and $input-extreme-min &lt;= $merge-extreme-min) or ($input-extreme-min and (string(number($merge-extreme-min)) = 'NaN'))">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-extreme-min/@*" />
                                        <xsl:apply-templates select="$input-extreme-min/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:otherwise>
+                       <!--    Both nodes values are numeric and input value is greater than merge
+                            or Input doesn't exist or is not numeric but merge does
+                       -->
+                       <xsl:when test="(string(number($input-extreme-min)) != 'NaN' and string(number($merge-extreme-min) != 'NaN') and $input-extreme-min &gt; $merge-extreme-min) or ((string(number($input-extreme-min)) = 'NaN') and $merge-extreme-min)">
                                <xsl:copy>
                                        <xsl:apply-templates select="$merge-extreme-min/@*" />
                                        <xsl:apply-templates select="$merge-extreme-min/node()" />
                                </xsl:copy>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="concat($month, '-', $day, ' - extremeMin ', number($input-extreme-min), ' ', number($merge-extreme-min))" />
+                               </xsl:message>
+                               <xsl:message terminate="yes">Trapping case not supposed to happen.</xsl:message>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
                <xsl:variable name="merge-normal-max" select="$merge-doc/climatedata/month[@index = $month]/day[@index = $day]/temperature[@class = 'normalMax']" />
                
                <xsl:choose>
-                       <xsl:when test="$input-normal-max and (not($merge-normal-max) or $input-normal-max/text() &gt;= $merge-normal-max/text())">
+                       <!--    Both nodes values are numeric and input value is greater or equal than merge
+                            or Input exists but merge doesn't or is not numeric
+                       -->
+                       <xsl:when test="(string(number($input-normal-max)) != 'NaN' and string(number($merge-normal-max) != 'NaN') and $input-normal-max &gt;= $merge-normal-max) or ($input-normal-max and (string(number($merge-normal-max)) = 'NaN'))">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-normal-max/@*" />
                                        <xsl:apply-templates select="$input-normal-max/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:otherwise>
+                       <!--    Both nodes values are numeric and input value is lesser than merge
+                            or Input doesn't exist or is not numeric but merge does
+                       -->
+                       <xsl:when test="(string(number($input-normal-max)) != 'NaN' and string(number($merge-normal-max) != 'NaN') and $input-normal-max &lt; $merge-normal-max) or ((string(number($input-normal-max)) = 'NaN') and $merge-normal-max)">
                                <xsl:copy>
                                        <xsl:apply-templates select="$merge-normal-max/@*" />
                                        <xsl:apply-templates select="$merge-normal-max/node()" />
                                </xsl:copy>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="concat($month, '-', $day, ' - normalMax ', number($input-normal-max), ' ', number($merge-normal-max))" />
+                               </xsl:message>
+                               <xsl:message terminate="yes">Trapping case not supposed to happen.</xsl:message>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
                <xsl:variable name="merge-normal-min" select="$merge-doc/climatedata/month[@index = $month]/day[@index = $day]/temperature[@class = 'normalMin']" />
                
                <xsl:choose>
-                       <xsl:when test="$input-normal-min and (not($merge-normal-min) or $input-normal-min/text() &lt;= $merge-normal-min/text())">
+                       <!--    Both nodes values are numeric and input value is lesser or equal than merge
+                            or Input exists but merge doesn't or is not numeric
+                       -->
+                       <xsl:when test="(string(number($input-normal-min)) != 'NaN' and string(number($merge-normal-min) != 'NaN') and $input-normal-min &lt;= $merge-normal-min) or ($input-normal-min and (string(number($merge-normal-min)) = 'NaN'))">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-normal-min/@*" />
                                        <xsl:apply-templates select="$input-normal-min/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:otherwise>
+                       <!--    Both nodes values are numeric and input value is greater than merge
+                            or Input doesn't exist or is not numeric but merge does
+                       -->
+                       <xsl:when test="(string(number($input-normal-min)) != 'NaN' and string(number($merge-normal-min) != 'NaN') and $input-normal-min &gt; $merge-normal-min) or ((string(number($input-normal-min)) = 'NaN') and $merge-normal-min)">
                                <xsl:copy>
                                        <xsl:apply-templates select="$merge-normal-min/@*" />
                                        <xsl:apply-templates select="$merge-normal-min/node()" />
                                </xsl:copy>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="concat($month, '-', $day, ' - normalMin ', number($input-normal-min), ' ', number($merge-normal-min))" />
+                               </xsl:message>
+                               <xsl:message terminate="yes">Trapping case not supposed to happen.</xsl:message>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
                <xsl:variable name="merge-normal-mean" select="$merge-doc/climatedata/month[@index = $month]/day[@index = $day]/temperature[@class = 'normalMean']" />
                
                <xsl:choose>
-                       <xsl:when test="$input-normal-mean and $input-normal-mean/text() != '' and $merge-normal-mean and $merge-normal-mean/text() != ''">
+                       <!-- Node exists and are not empty on both sides -->
+                       <xsl:when test="$input-normal-mean and $input-normal-mean != '' and $merge-normal-mean and $merge-normal-mean/text() != ''">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-normal-mean/@*" />
                                        <xsl:attribute name="values-count"><xsl:value-of select="$input-normal-mean/@values-count + 1" /></xsl:attribute>
                                        <xsl:value-of select="format-number(number($input-normal-mean/text() * $input-normal-mean/@values-count + $merge-normal-mean/text()) div number($input-normal-mean/@values-count + 1), '0.0')" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:when test="$input-normal-mean != '' and (not($merge-normal-mean) or $merge-normal-mean = '')">
+                       <!-- Node exists but are empty on both sides -->
+                       <xsl:when test="$input-normal-mean = '' and $merge-normal-mean = ''">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-normal-mean/@*" />
                                        <xsl:apply-templates select="$input-normal-mean/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:when test="(not($input-normal-mean) or $input-normal-mean = '') and $merge-normal-mean and $merge-normal-mean != ''">
+                       <!-- Node exists in input but not-or-empty in merge -->
+                       <xsl:when test="$input-normal-mean and (not($merge-normal-mean) or $merge-normal-mean = '')">
                                <xsl:copy>
-                                       <xsl:apply-templates select="$merge-normal-mean/@*" />
-                                       <xsl:attribute name="values-count">1</xsl:attribute>
-                                       <xsl:apply-templates select="$merge-normal-mean/node()" />
+                                       <xsl:apply-templates select="$input-normal-mean/@*" />
+                                       <xsl:apply-templates select="$input-normal-mean/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:when test="$input-normal-mean = '' and $merge-normal-mean = ''">
+                       <!-- Node doesn't exist or is empty in input and exists in merge -->
+                       <xsl:when test="(not($input-normal-mean) or $input-normal-mean = '') and $merge-normal-mean">
                                <xsl:copy>
-                                       <xsl:apply-templates select="$input-normal-mean/@*" />
-                                       <xsl:apply-templates select="$input-normal-mean/node()" />
+                                       <xsl:apply-templates select="$merge-normal-mean/@*" />
+                                       <xsl:if test="$merge-normal-mean != ''">
+                                               <xsl:attribute name="values-count">1</xsl:attribute>
+                                               <xsl:apply-templates select="$merge-normal-mean/node()" />
+                                       </xsl:if>
                                </xsl:copy>
                        </xsl:when>
                        <xsl:otherwise>
                                <xsl:message terminate="no">
                                        <xsl:value-of select="concat($month, '-', $day, ' - normalMean: ', $input-normal-mean, ' ', $merge-normal-mean)" />
                                </xsl:message>
-                               <xsl:message terminate="yes">Trapping case not supposed to happend.</xsl:message>
+                               <xsl:message terminate="yes">Trapping case not supposed to happen.</xsl:message>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
                <xsl:variable name="merge-precipitation-rainfall" select="$merge-doc/climatedata/month[@index = $month]/day[@index = $day]/precipitation[@class = 'extremeRainfall']" />
                
                <xsl:choose>
-                       <xsl:when test="$input-precipitation-rainfall and (not($merge-precipitation-rainfall) or $input-precipitation-rainfall/text() &gt;= $merge-precipitation-rainfall/text())">
+                       <!--    Both nodes values are numeric and input value is greater or equal than merge
+                            or Input exists but merge doesn't or is not numeric
+                       -->
+                       <xsl:when test="(string(number($input-precipitation-rainfall)) != 'NaN' and string(number($merge-precipitation-rainfall) != 'NaN') and $input-precipitation-rainfall &gt;= $merge-precipitation-rainfall) or ($input-precipitation-rainfall and (string(number($merge-precipitation-rainfall)) = 'NaN'))">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-precipitation-rainfall/@*" />
                                        <xsl:apply-templates select="$input-precipitation-rainfall/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:otherwise>
+                       <!--    Both nodes values are numeric and input value is lesser than merge
+                            or Input doesn't exist or is not numeric but merge does
+                       -->
+                       <xsl:when test="(string(number($input-precipitation-rainfall)) != 'NaN' and string(number($merge-precipitation-rainfall) != 'NaN') and $input-precipitation-rainfall &lt; $merge-precipitation-rainfall) or ((string(number($input-precipitation-rainfall)) = 'NaN') and $merge-precipitation-rainfall)">
                                <xsl:copy>
                                        <xsl:apply-templates select="$merge-precipitation-rainfall/@*" />
                                        <xsl:apply-templates select="$merge-precipitation-rainfall/node()" />
                                </xsl:copy>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="concat($month, '-', $day, ' - extremeRainfall ', number($input-precipitation-rainfall), ' ', number($merge-precipitation-rainfall))" />
+                               </xsl:message>
+                               <xsl:message terminate="yes">Trapping case not supposed to happen.</xsl:message>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
                <xsl:variable name="merge-precipitation-snowfall" select="$merge-doc/climatedata/month[@index = $month]/day[@index = $day]/precipitation[@class = 'extremeSnowfall']" />
                
                <xsl:choose>
-                       <xsl:when test="$input-precipitation-snowfall and (not($merge-precipitation-snowfall) or $input-precipitation-snowfall/text() &gt;= $merge-precipitation-snowfall/text())">
+                       <!--    Both nodes values are numeric and input value is greater or equal than merge
+                            or Input exists but merge doesn't or is not numeric
+                       -->
+                       <xsl:when test="(string(number($input-precipitation-snowfall)) != 'NaN' and string(number($merge-precipitation-snowfall) != 'NaN') and $input-precipitation-snowfall &gt;= $merge-precipitation-snowfall) or ($input-precipitation-snowfall and (string(number($merge-precipitation-snowfall)) = 'NaN'))">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-precipitation-snowfall/@*" />
                                        <xsl:apply-templates select="$input-precipitation-snowfall/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:otherwise>
+                       <!--    Both nodes values are numeric and input value is lesser than merge
+                            or Input doesn't exist or is not numeric but merge does
+                       -->
+                       <xsl:when test="(string(number($input-precipitation-snowfall)) != 'NaN' and string(number($merge-precipitation-snowfall) != 'NaN') and $input-precipitation-snowfall &lt; $merge-precipitation-snowfall) or ((string(number($input-precipitation-snowfall)) = 'NaN') and $merge-precipitation-snowfall)">
                                <xsl:copy>
                                        <xsl:apply-templates select="$merge-precipitation-snowfall/@*" />
                                        <xsl:apply-templates select="$merge-precipitation-snowfall/node()" />
                                </xsl:copy>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="concat($month, '-', $day, ' - extremeSnowfall ', number($input-precipitation-snowfall), ' ', number($merge-precipitation-snowfall))" />
+                               </xsl:message>
+                               <xsl:message terminate="yes">Trapping case not supposed to happen.</xsl:message>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
                <xsl:variable name="merge-precipitation-extreme" select="$merge-doc/climatedata/month[@index = $month]/day[@index = $day]/precipitation[@class = 'extremePrecipitation']" />
                
                <xsl:choose>
-                       <xsl:when test="$input-precipitation-extreme and (not($merge-precipitation-extreme) or $input-precipitation-extreme/text() &gt;= $merge-precipitation-extreme/text())">
+                       <!--    Both nodes values are numeric and input value is greater or equal than merge
+                            or Input exists but merge doesn't or is not numeric
+                       -->
+                       <xsl:when test="(string(number($input-precipitation-extreme)) != 'NaN' and string(number($merge-precipitation-extreme) != 'NaN') and $input-precipitation-extreme &gt;= $merge-precipitation-extreme) or ($input-precipitation-extreme and (string(number($merge-precipitation-extreme)) = 'NaN'))">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-precipitation-extreme/@*" />
                                        <xsl:apply-templates select="$input-precipitation-extreme/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:otherwise>
+                       <!--    Both nodes values are numeric and input value is lesser than merge
+                            or Input doesn't exist or is not numeric but merge does
+                       -->
+                       <xsl:when test="(string(number($input-precipitation-extreme)) != 'NaN' and string(number($merge-precipitation-extreme) != 'NaN') and $input-precipitation-extreme &lt; $merge-precipitation-extreme) or ((string(number($input-precipitation-extreme)) = 'NaN') and $merge-precipitation-extreme)">
                                <xsl:copy>
                                        <xsl:apply-templates select="$merge-precipitation-extreme/@*" />
                                        <xsl:apply-templates select="$merge-precipitation-extreme/node()" />
                                </xsl:copy>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="concat($month, '-', $day, ' - extremePrecipitation ', number($input-precipitation-extreme), ' ', number($merge-precipitation-extreme))" />
+                               </xsl:message>
+                               <xsl:message terminate="yes">Trapping case not supposed to happen.</xsl:message>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
                <xsl:variable name="merge-precipitation-snow-ground" select="$merge-doc/climatedata/month[@index = $month]/day[@index = $day]/precipitation[@class = 'extremeSnowOnGround']" />
                
                <xsl:choose>
-                       <xsl:when test="$input-precipitation-snow-ground and (not($merge-precipitation-snow-ground) or $input-precipitation-snow-ground/text() &gt;= $merge-precipitation-snow-ground/text())">
+                       <!--    Both nodes values are numeric and input value is greater or equal than merge
+                            or Input exists but merge doesn't or is not numeric
+                       -->
+                       <xsl:when test="(string(number($input-precipitation-snow-ground)) != 'NaN' and string(number($merge-precipitation-snow-ground) != 'NaN') and $input-precipitation-snow-ground &gt;= $merge-precipitation-snow-ground) or ($input-precipitation-snow-ground and (string(number($merge-precipitation-snow-ground)) = 'NaN'))">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-precipitation-snow-ground/@*" />
                                        <xsl:apply-templates select="$input-precipitation-snow-ground/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:otherwise>
+                       <!--    Both nodes values are numeric and input value is lesser than merge
+                            or Input doesn't exist or is not numeric but merge does
+                       -->
+                       <xsl:when test="(string(number($input-precipitation-snow-ground)) != 'NaN' and string(number($merge-precipitation-snow-ground) != 'NaN') and $input-precipitation-snow-ground &lt; $merge-precipitation-snow-ground) or ((string(number($input-precipitation-snow-ground)) = 'NaN') and $merge-precipitation-snow-ground)">
                                <xsl:copy>
                                        <xsl:apply-templates select="$merge-precipitation-snow-ground/@*" />
                                        <xsl:apply-templates select="$merge-precipitation-snow-ground/node()" />
                                </xsl:copy>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="concat($month, '-', $day, ' - extremeSnowOnGround ', number($input-precipitation-snow-ground), ' ', number($merge-precipitation-snow-ground))" />
+                               </xsl:message>
+                               <xsl:message terminate="yes">Trapping case not supposed to happen.</xsl:message>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
                <xsl:variable name="merge-pop" select="$merge-doc/climatedata/month[@index = $month]/day[@index = $day]/pop" />
                
                <xsl:choose>
-                       <xsl:when test="$input-pop and $input-pop/text() != '' and $merge-pop and $merge-pop/text() != ''">
+                       <!-- Node exists and are not empty on both sides -->
+                       <xsl:when test="$input-pop and $input-pop != '' and $merge-pop and $merge-pop/text() != ''">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-pop/@*" />
                                        <xsl:attribute name="values-count"><xsl:value-of select="$input-pop/@values-count + 1" /></xsl:attribute>
                                        <xsl:value-of select="format-number(number($input-pop/text() * $input-pop/@values-count + $merge-pop/text()) div number($input-pop/@values-count + 1), '0.0')" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:when test="$input-pop != '' and (not($merge-pop) or $merge-pop = '')">
+                       <!-- Node exists but are empty on both sides -->
+                       <xsl:when test="$input-pop = '' and $merge-pop = ''">
                                <xsl:copy>
                                        <xsl:apply-templates select="$input-pop/@*" />
                                        <xsl:apply-templates select="$input-pop/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:when test="(not($input-pop) or $input-pop = '') and $merge-pop and $merge-pop/text() != ''">
+                       <!-- Node exists in input but not-or-empty in merge -->
+                       <xsl:when test="$input-pop and (not($merge-pop) or $merge-pop = '')">
                                <xsl:copy>
-                                       <xsl:apply-templates select="$merge-pop/@*" />
-                                       <xsl:attribute name="values-count">1</xsl:attribute>
-                                       <xsl:apply-templates select="$merge-pop/node()" />
+                                       <xsl:apply-templates select="$input-pop/@*" />
+                                       <xsl:apply-templates select="$input-pop/node()" />
                                </xsl:copy>
                        </xsl:when>
-                       <xsl:when test="(not($input-pop) or $input-pop = '') and (not($merge-pop) or $merge-pop = '')">
+                       <!-- Node doesn't exist or is empty in input and exists in merge -->
+                       <xsl:when test="(not($input-pop) or $input-pop = '') and $merge-pop">
                                <xsl:copy>
-                                       <xsl:apply-templates select="$input-pop/@*" />
-                                       <xsl:apply-templates select="$input-pop/node()" />
+                                       <xsl:apply-templates select="$merge-pop/@*" />
+                                       <xsl:if test="$merge-pop != ''">
+                                               <xsl:attribute name="values-count">1</xsl:attribute>
+                                               <xsl:apply-templates select="$merge-pop/node()" />
+                                       </xsl:if>
                                </xsl:copy>
                        </xsl:when>
                        <xsl:otherwise>
                                <xsl:message terminate="no">
                                        <xsl:value-of select="concat($month, '-', $day, ' - pop: ', $input-pop, ' ', $merge-pop)" />
                                </xsl:message>
-                               <xsl:message terminate="yes">Trapping case not supposed to happend.</xsl:message>
+                               <xsl:message terminate="yes">Trapping case not supposed to happen.</xsl:message>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>