View stylesheet

XML schema http://dd.eionet.europa.eu/schemas/mmr-article17/MMRArticle17Questionnaire.xsd
Output type SQL
Description SQL inserts for MS Access
XSL file article17-sql.xsl (Last modified: 22 Aug 2014 06:58 )
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:local="local">

    <xsl:output method="text" />

    <xsl:param name="envelopeurl" select="''"/>
    <xsl:param name="releasetime" select="''"/>
    <xsl:param name="filename" />
    <xsl:param name="isreleased" select="'1'"/>
    <xsl:param name="countrycode" />
    <xsl:param name="commandline" select="'false'"/>

    <!--
    <xsl:param name="envelopeurl" select="'http://cdrtest.eionet.europa.eu/ee/eu/coluyk36g/envuylpda'"/>
    <xsl:param name="releasetime" select="substring-before(string(current-dateTime()), '.')"/>
    <xsl:param name="envelopeurl" select="''"/>
    <xsl:param name="releasetime" select="''"/>
    -->

    <xsl:variable name="codelists" 
select="document('http://webforms.eionet.europa.eu/download/project/mmr-art17/file/art17-codelists-en.xml')/Article17Codelists"/>
    <xsl:variable name="labels" select="document('http://webforms.eionet.europa.eu/download/project/mmr-art17/file/article17-labels.xml')/labels"/>

    <xsl:variable name="reportid" select="concat($envelopeurl, '/', $filename , '#', $releasetime)"/>

    <xsl:template match="MMRArticle17Questionnaire">
        <xsl:variable name="xmlRoot" select="."/>
        <xsl:variable name="country" >
            <xsl:choose>
                <xsl:when test="string-length($countrycode) > 0"><xsl:value-of select="$countrycode"/></xsl:when>
                <xsl:otherwise><xsl:value-of select="document(concat($envelopeurl, '/xml'))/envelope/countrycode"/></xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
<xsl:text>DELETE FROM tbl_report WHERE report_id=</xsl:text><xsl:call-template name="string"><xsl:with-param name="value" select="$reportid"/></xsl:call-template><xsl:text>;</xsl:text>
        <xsl:call-template name="statementSeparator"/>
        <xsl:text>INSERT INTO tbl_report (report_id, country, report_year, report_submissiondate, envelope_url, filename, envelope_isreleased, language) VALUES (</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="$reportid"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="$country"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="number"><xsl:with-param name="value" select="@year"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="datetime"><xsl:with-param name="value" select="$releasetime"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="$envelopeurl"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="$filename"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="$isreleased"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="@xml:lang"/></xsl:call-template><xsl:text></xsl:text>
        <xsl:text>);</xsl:text>
        <xsl:call-template name="statementSeparator"/>
        <xsl:text>UPDATE tbl_report SET most_recent_report = 1 WHERE country='</xsl:text>
        <xsl:value-of select="$country"/>
        <xsl:text>' and report_year=</xsl:text>
        <xsl:value-of select="@year"/>
        <xsl:text> and report_submissiondate IN (SELECT TOP 1 report_submissiondate FROM tbl_report WHERE country='</xsl:text>
        <xsl:value-of select="$country"/>
        <xsl:text>' and report_year=</xsl:text>
        <xsl:value-of select="@year"/>
        <xsl:text> order by report_submissiondate  DESC);</xsl:text>
        <xsl:call-template name="statementSeparator"/>
        <xsl:text>UPDATE tbl_report SET most_recent_report = 0 WHERE country='</xsl:text>
        <xsl:value-of select="$country"/>
        <xsl:text>' and report_year=</xsl:text>
        <xsl:value-of select="@year"/>
        <xsl:text> and report_submissiondate NOT IN (SELECT TOP 1 report_submissiondate FROM tbl_report WHERE country='</xsl:text>
        <xsl:value-of select="$country"/>
        <xsl:text>' and report_year=</xsl:text>
        <xsl:value-of select="@year"/>
        <xsl:text> order by report_submissiondate  DESC);</xsl:text>
        <xsl:call-template name="statementSeparator"/>

        <!-- tbl_Explanations -->
        <xsl:text>INSERT INTO tbl_Explanations (report_id, Table1_MethodologyOnCurrencyExchange, Table1_MethodologyOnCommitmentAndDisbursement, Table3_EventualExplanation) VALUES (</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="$reportid"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="Table1/MethodologyOnCurrencyExchange"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="Table1/MethodologyOnCommitmentAndDisbursement"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="Table3/EventualExplanation"/></xsl:call-template>
        <xsl:text>);</xsl:text>
        <xsl:call-template name="statementSeparator"/>

        <xsl:apply-templates select="Table1|Table2|Table3|Table4|Table5"/>
        <xsl:text>
        </xsl:text>
    </xsl:template>

    <!-- tbl_Table1 -->
    <xsl:template match="Table1">
        <xsl:for-each select="child::*[count(child::Euros) > 0]">
            <xsl:variable name="row_id" select="position()"/>
            <xsl:variable name="question_code" select="local-name()"/>

            <xsl:text>INSERT INTO tbl_Table1 (report_id, row_id, question_code, question_label, Euros, Euros_text, LocalCurrency, LocalCurrency_text) VALUES (</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="$reportid"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="integer"><xsl:with-param name="value" select="$row_id"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="labelsValue"><xsl:with-param name="code" select="$question_code"/><xsl:with-param name="table" select="'Table1'"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="Euros"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="LocalCurrency"/></xsl:call-template>
            <xsl:text>);</xsl:text>
            <xsl:call-template name="statementSeparator"/>
        </xsl:for-each>
    </xsl:template>

    <!-- tbl_Table2 -->
    <xsl:template match="Table2">
        <xsl:for-each select="QuestionRow">
            <xsl:variable name="row_id" select="position()"/>

            <xsl:text>INSERT INTO tbl_Table2 (report_id, row_id, PurposeForRevenues, ShortDescription, Euros, Euros_text, LocalCurrency, LocalCurrency_text, Status, RevenuesPursuantToArticle3d, RevenuesPursuantToArticle10, TypeOfUse, FinancialInstrument, ImplementingAgency, AdditionalInfo) VALUES (</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="$reportid"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="integer"><xsl:with-param name="value" select="$row_id"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="PurposeForRevenues"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="ShortDescription"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="AmountForYear/Euros"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="AmountForYear/LocalCurrency"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="Status"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="boolean"><xsl:with-param name="value" select="RevenuesPursuantToArticle3d"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="boolean"><xsl:with-param name="value" select="RevenuesPursuantToArticle10"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="multiselectCodelistValue">
                <xsl:with-param name="element" select="'TypeOfUse'"/>
                <xsl:with-param name="codelistName" select="'Table2TypeOfUses'"/>
            </xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="multiselectCodelistValue">
                <xsl:with-param name="element" select="'FinancialInstrument'"/>
                <xsl:with-param name="codelistName" select="'Table2FinancialInstruments'"/>
            </xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="ImplementingAgency"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="AdditionalInfo"/></xsl:call-template>
            <xsl:text>);</xsl:text>
            <xsl:call-template name="statementSeparator"/>

            <xsl:call-template name="insertRelatedMultiselectCodelist">
                <xsl:with-param name="table" select="'2'"/>
                <xsl:with-param name="row_id" select="$row_id" />
                <xsl:with-param name="codelistElementName" select="'TypeOfUse'"/>
                <xsl:with-param name="codelistName" select="'Table2TypeOfUses'"/>
            </xsl:call-template>
            <xsl:call-template name="insertRelatedMultiselectCodelist">
                <xsl:with-param name="table" select="'2'"/>
                <xsl:with-param name="row_id" select="$row_id" />
                <xsl:with-param name="codelistElementName" select="'FinancialInstrument'"/>
                <xsl:with-param name="codelistName" select="'Table2FinancialInstruments'"/>
            </xsl:call-template>
        </xsl:for-each>
    </xsl:template>

    <!-- tbl_Table3 -->
    <xsl:template match="Table3">
        <xsl:for-each select="FixedQuestion">
            <xsl:variable name="row_id" select="position()"/>

            <xsl:text>INSERT INTO tbl_Table3 (report_id, row_id, question_code, question_label, AmountCommitted_Euros, AmountCommitted_Euros_text, AmountCommitted_LocalCurrency, AmountCommitted_LocalCurrency_text, AmountDisbursed_Euros, AmountDisbursed_Euros_text, AmountDisbursed_LocalCurrency, AmountDisbursed_LocalCurrency_text) VALUES (</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="$reportid"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="integer"><xsl:with-param name="value" select="$row_id"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="codelistValue"><xsl:with-param name="code" select="TypeOfSupport"/><xsl:with-param name="codelistName" select="'Table3TypeOfSupports'"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="AmountCommitted/Euros"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="AmountCommitted/LocalCurrency"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="AmountDisbursed/Euros"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="AmountDisbursed/LocalCurrency"/></xsl:call-template>
            <xsl:text>);</xsl:text>
            <xsl:call-template name="statementSeparator"/>

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

    <!-- tbl_Table4 -->
    <xsl:template match="Table4">
        <xsl:for-each select="*/child::*">
            <xsl:variable name="row_id" select="position()"/>

            <xsl:text>INSERT INTO tbl_Table4 (report_id, row_id, question_code, question_label, type, Euros, Euros_text, LocalCurrency, LocalCurrency_text, Status, TypeOfSupport, FinancialInstrument, Sector, InformationNotAvailable, AdditionalInfo) VALUES (</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="$reportid"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="integer"><xsl:with-param name="value" select="$row_id"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:choose>
                <xsl:when test="local-name()='OtherPleaseSpecify'">
                    <xsl:call-template name="string"><xsl:with-param name="value" select="'other'"/></xsl:call-template><xsl:text>,</xsl:text>
                    <xsl:call-template name="string"><xsl:with-param name="value" select="OtherDescription"/></xsl:call-template><xsl:text>,</xsl:text>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:call-template name="codelistValue"><xsl:with-param name="code" select="UseOfRevenue"/><xsl:with-param name="codelistName" select="'Table4UseOfRevenues'"/></xsl:call-template><xsl:text>,</xsl:text>
                </xsl:otherwise>
            </xsl:choose>
            <xsl:call-template name="string"><xsl:with-param name="value" select="local-name(..)"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="AmountCommitted/Euros"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="AmountCommitted/LocalCurrency"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="Status"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="TypeOfSupport"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="multiselectCodelistValue">
                <xsl:with-param name="element" select="'FinancialInstrument'"/>
                <xsl:with-param name="codelistName" select="'Table4FinancialInstruments'"/>
            </xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="multiselectCodelistValue">
                <xsl:with-param name="element" select="'Sector'"/>
                <xsl:with-param name="codelistName" select="'Table4Sectors'"/>
            </xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="boolean"><xsl:with-param name="value" select="InformationNotAvailable"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="AdditionalInfo"/></xsl:call-template>
            <xsl:text>);</xsl:text>
            <xsl:call-template name="statementSeparator"/>

            <xsl:call-template name="insertRelatedMultiselectCodelist">
                <xsl:with-param name="table" select="'4'"/>
                <xsl:with-param name="row_id" select="$row_id" />
                <xsl:with-param name="codelistElementName" select="'FinancialInstrument'"/>
                <xsl:with-param name="codelistName" select="'Table4FinancialInstruments'"/>
            </xsl:call-template>
            <xsl:call-template name="insertRelatedMultiselectCodelist">
                <xsl:with-param name="table" select="'4'"/>
                <xsl:with-param name="row_id" select="$row_id" />
                <xsl:with-param name="codelistElementName" select="'Sector'"/>
                <xsl:with-param name="codelistName" select="'Table4Sectors'"/>
            </xsl:call-template>
        </xsl:for-each>
    </xsl:template>

    <!-- tbl_Table5 -->
    <xsl:template match="Table5">
        <xsl:for-each select="QuestionRow">
            <xsl:variable name="row_id" select="position()"/>

            <xsl:text>INSERT INTO tbl_Table5 (report_id, row_id, Programme, Recipient, Euros, Euros_text, LocalCurrency, LocalCurrency_text, Status, TypeOfSupport, FinancialInstrument, Sector, ImplementingAgency, InformationNotAvailable, AdditionalInfo) VALUES (</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="$reportid"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="integer"><xsl:with-param name="value" select="$row_id"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="Programme"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="Recipient"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="AmountCommitted/Euros"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="decimal"><xsl:with-param name="value" select="AmountCommitted/LocalCurrency"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="Status"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="TypeOfSupport"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="multiselectCodelistValue">
                <xsl:with-param name="element" select="'FinancialInstrument'"/>
                <xsl:with-param name="codelistName" select="'Table5FinancialInstruments'"/>
            </xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="multiselectCodelistValue">
                <xsl:with-param name="element" select="'Sector'"/>
                <xsl:with-param name="codelistName" select="'Table5Sectors'"/>
            </xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="ImplementingAgency"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="boolean"><xsl:with-param name="value" select="InformationNotAvailable"/></xsl:call-template><xsl:text>,</xsl:text>
            <xsl:call-template name="string"><xsl:with-param name="value" select="AdditionalInfo"/></xsl:call-template>
            <xsl:text>);</xsl:text>
            <xsl:call-template name="statementSeparator"/>

            <xsl:call-template name="insertRelatedMultiselectCodelist">
                <xsl:with-param name="table" select="'5'"/>
                <xsl:with-param name="row_id" select="$row_id" />
                <xsl:with-param name="codelistElementName" select="'FinancialInstrument'"/>
                <xsl:with-param name="codelistName" select="'Table5FinancialInstruments'"/>
            </xsl:call-template>
            <xsl:call-template name="insertRelatedMultiselectCodelist">
                <xsl:with-param name="table" select="'5'"/>
                <xsl:with-param name="row_id" select="$row_id" />
                <xsl:with-param name="codelistElementName" select="'Sector'"/>
                <xsl:with-param name="codelistName" select="'Table5Sectors'"/>
            </xsl:call-template>
        </xsl:for-each>
    </xsl:template>

    <!-- COMMON templates -->
    <xsl:template name="insertRelatedMultiselectCodelist" >
        <xsl:param name="table" />
        <xsl:param name="row_id" />
        <xsl:param name="codelistElementName"/>
        <xsl:param name="codelistName"/>

        <xsl:variable name="tableIdField" select="concat('table', ($table), '_id')" />
        <xsl:variable name="tableName" select="concat('tbl_Table', $table, '_', $codelistElementName)" />

        <xsl:for-each select="*[local-name()=$codelistElementName]">
            <xsl:if test="string-length(normalize-space(.))>0">
                <xsl:text>INSERT INTO </xsl:text><xsl:value-of select="$tableName"/><xsl:text> (</xsl:text><xsl:value-of select="$tableIdField"/><xsl:text>, code, label) SELECT id, </xsl:text>
                <xsl:call-template name="codelistValue"><xsl:with-param name="code" select="."/><xsl:with-param name="codelistName" select="$codelistName"/></xsl:call-template>
                <xsl:text> FROM </xsl:text><xsl:value-of select="concat('tbl_Table', $table)"/><xsl:text> WHERE report_id='</xsl:text><xsl:value-of select="$reportid"/><xsl:text>' AND row_id=</xsl:text><xsl:value-of select="$row_id"/><xsl:text>;</xsl:text>
                <xsl:call-template name="statementSeparator"/>
            </xsl:if>
        </xsl:for-each>

    </xsl:template>


    <xsl:template name="multiselectCodelistValue" >
        <xsl:param name="element"/>
        <xsl:param name="codelistName"/>

        <xsl:variable name="aggregatedLabel">
            <xsl:for-each select="*[local-name()=$element]">
                <xsl:variable name="code" select="."/>
                <xsl:variable name="label" select="$codelists/*[local-name() = $codelistName]/*/label[../code = $code]"/>
                <xsl:choose>
                    <xsl:when test="string-length($label)>0"><xsl:value-of select="$label"/></xsl:when>
                    <xsl:otherwise><xsl:value-of select="$code"/></xsl:otherwise>
                </xsl:choose>
                <xsl:if test="position()!=last()"><xsl:text>; </xsl:text></xsl:if>
            </xsl:for-each>
        </xsl:variable>

        <xsl:call-template name="string"><xsl:with-param name="value" select="$aggregatedLabel"/></xsl:call-template>
    </xsl:template>
    <xsl:template name="codelistValue" >
        <xsl:param name="code"/>
        <xsl:param name="codelistName"/>

        <xsl:variable name="label" select="$codelists/*[local-name() = $codelistName]/*/label[../code = $code]"/>

        <xsl:call-template name="string"><xsl:with-param name="value" select="$code"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="$label"/></xsl:call-template>
    </xsl:template>

    <xsl:template name="labelsValue" >
        <xsl:param name="code"/>
        <xsl:param name="table"/>

        <xsl:variable name="labelCode">
            <xsl:choose>
                <xsl:when test="$code='TotalAmountOfAuctioningRevenuesGeneratedAndUsed' and $table='Table1'">Table1-TotalAuctioningAllowancesUsedAndGenerated</xsl:when>
                <xsl:otherwise><xsl:value-of select="concat($table, '-', $code)"/></xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="label" select="$labels/*[local-name() = $labelCode]"/>

        <xsl:call-template name="string"><xsl:with-param name="value" select="$code"/></xsl:call-template><xsl:text>,</xsl:text>
        <xsl:call-template name="string"><xsl:with-param name="value" select="$label"/></xsl:call-template>
    </xsl:template>

    <xsl:template name="string">
        <xsl:param name="value"/>
        <xsl:param name="isMemo" select="'false'"/>
        <xsl:param name="isNode" select="'false'"/>

        <xsl:variable name="strValue">
            <xsl:choose>
                <xsl:when test="$isNode='true' and count($value) > 1">
                    <xsl:for-each select="$value">
                        <xsl:value-of select="."/><xsl:if test="position() != last()">, </xsl:if>
                    </xsl:for-each>
                </xsl:when>
                <xsl:otherwise><xsl:value-of select="$value"/></xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <xsl:variable name="value255">
            <xsl:choose>
                <xsl:when test="string-length($strValue) > 255 and $isMemo = 'false'"><xsl:value-of select="substring($strValue, 1, 255)"/></xsl:when>
                <xsl:otherwise><xsl:value-of select="$strValue"/></xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <xsl:variable name="valueEscaped">
            <xsl:call-template name="globalReplace">
                <xsl:with-param name="text" select="$value255"/>
            </xsl:call-template>
        </xsl:variable>

        <xsl:variable name="outputStr">
            <xsl:choose>
                <xsl:when test="$value != ''">
                    <xsl:text>'</xsl:text>
                    <xsl:value-of select="$valueEscaped"/>
                    <xsl:text>'</xsl:text></xsl:when>
                <xsl:otherwise>NULL</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <!-- remove line break apostrophes from the start and end of strings. -->
        <xsl:call-template name="string-replace-all">
            <xsl:with-param name="text">
                <xsl:call-template name="string-replace-all">
                    <xsl:with-param name="text" select="$outputStr"/>
                    <xsl:with-param name="replace" select='"&amp; &apos;&apos;$"'/>
                    <xsl:with-param name="by" select="''"/>
                </xsl:call-template>
            </xsl:with-param>
            <xsl:with-param name="replace" select='"&apos;&apos; &amp;"'/>
            <xsl:with-param name="by" select="''"/>
        </xsl:call-template>
        <!--
        <xsl:value-of select='replace(replace($outputStr, "&amp; &apos;&apos;$", ""), "&apos;&apos; &amp;", "")'/>
        -->

    </xsl:template>

    <!-- Fixes quotes in database input strings -->
    <xsl:template name="globalReplace">
        <xsl:param name="text"/>
        <xsl:variable name="outputStr">
            <xsl:call-template name="string-replace-all">
                <xsl:with-param name="text">
                    <xsl:call-template name="string-replace-all">
                        <xsl:with-param name="text" select="$text"/>
                        <xsl:with-param name="replace" select='"&apos;"'/>
                        <xsl:with-param name="by" select='"&apos;&apos;"'/>
                    </xsl:call-template>
                </xsl:with-param>
                <xsl:with-param name="replace" select='"&#xA;"'/>
                <xsl:with-param name="by">
                    <xsl:choose>
                        <xsl:when test="$commandline='false'">&apos; &amp; Chr(10) &amp; Chr(13) &amp; &apos;</xsl:when>
                        <xsl:otherwise>&apos; + Char(13) + Char(10) + &apos;</xsl:otherwise>
                    </xsl:choose>
                </xsl:with-param>
            </xsl:call-template>
        </xsl:variable>
        <xsl:value-of select="$outputStr"/>
    </xsl:template>

    <xsl:template name="string-replace-all">
        <xsl:param name="text"/>
        <xsl:param name="replace"/>
        <xsl:param name="by"/>

        <xsl:choose>
            <xsl:when test='contains($text, $replace)'>
                <xsl:value-of select='concat(substring-before($text, $replace), $by)'/>
                <xsl:call-template name="string-replace-all">
                    <xsl:with-param name="text" select='substring-after($text, $replace)'/>
                    <xsl:with-param name="replace" select='$replace'/>
                    <xsl:with-param name="by" select='$by'/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$text"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <!-- format datetime for MS Access -->
    <xsl:template name="datetime">
        <xsl:param name="value"/>
        <xsl:choose>
            <xsl:when test="$value != ''">
                <xsl:text>'</xsl:text>
                <xsl:value-of select="translate($value, 'TZ', ' ')"/>
                <xsl:text>'</xsl:text></xsl:when>
            <xsl:otherwise>NULL</xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template name="number">
        <xsl:param name="value"/>
        <xsl:choose>
            <xsl:when test="number($value) = number($value)"><xsl:value-of select="$value"/></xsl:when>
            <xsl:otherwise>NULL</xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template name="integer">
        <xsl:param name="value"/>
        <xsl:choose>
            <xsl:when test="round($value) = number($value) and number($value) = number($value) and number($value) &lt; 2147483647"><xsl:value-of select="$value"/></xsl:when>
            <xsl:otherwise>NULL</xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template name="decimal">
        <xsl:param name="value"/>
        <xsl:choose>
            <xsl:when test="number($value) = number($value)"><xsl:value-of select="$value"/></xsl:when>
            <xsl:otherwise>NULL</xsl:otherwise>
        </xsl:choose><xsl:text>, </xsl:text><xsl:call-template name="string"><xsl:with-param name="value" select="$value"/></xsl:call-template>

    </xsl:template>

    <xsl:variable name="true-values-array">
        <local:item>true</local:item>
        <local:item>sand</local:item>
        <local:item>vero</local:item>
        <local:item>wahr</local:item>
        <local:item>vrai</local:item>
        <local:item>yes</local:item>
    </xsl:variable>
    <xsl:param name="true-values" select="document('')/*/xsl:variable[@name='true-values-array']/*" />

    <xsl:variable name="false-values-array">
        <local:item>false</local:item>
        <local:item>falsk</local:item>
        <local:item>falskt</local:item>
        <local:item>falso</local:item>
        <local:item>falsch</local:item>
        <local:item>faux</local:item>
        <local:item>no</local:item>
    </xsl:variable>
    <xsl:param name="false-values" select="document('')/*/xsl:variable[@name='false-values-array']/*" />

    <xsl:template name="boolean">
        <xsl:param name="value"/>

        <xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
        <xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>

        <xsl:choose>
            <xsl:when test="count($true-values[. = translate($value,$ucletters,$lcletters)]) > 0">TRUE</xsl:when>
            <xsl:when test="count($false-values[. = translate($value,$ucletters,$lcletters)]) > 0">FALSE</xsl:when>
            <xsl:when test="$value = 'true' or $value = 1">TRUE</xsl:when>
            <xsl:when test="$value = 'false' or $value = 0">FALSE</xsl:when>
            <xsl:otherwise>NULL</xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template name="statementSeparator">
        <xsl:if test="$commandline='false'">--</xsl:if>
        <xsl:text>
</xsl:text>
    </xsl:template>
    
</xsl:stylesheet>