XSLT 2.0 creating incremental footnote numbers in HTML output through multi-stage transformation

后端 未结 1 1513
醉话见心
醉话见心 2021-01-28 17:10

This question builds on the responses to my original question, where it was suggested that I post a followup. This concerns attempting to integrate the XSL code from the previou

相关标签:
1条回答
  • 2021-01-28 17:52

    I think, unless you want to prefix all your paths in that template matching / with the variable I suggested to store the result of the marker insertion, one way to merge the existing code with my suggestion is to change the match from / to /* e.g. use

    <xsl:template match="/*">
            <!-- div for text -->
            <div>
                <!-- LATIN : always present -->
                <h3>Latin</h3>
                <xsl:apply-templates select="//tei:body//tei:p"/>
    
                <!-- ENGLISH : always present -->
                <h3>English</h3>
                <xsl:apply-templates select="//tei:back//tei:p[@xml:lang='EN']"/>
    
                <!-- FRENCH : sometimes present -->
                <xsl:if test="//tei:back//tei:p[@xml:lang='FR']">
                    <h3>French</h3>
                    <xsl:apply-templates select="//tei:back//tei:p[@xml:lang='FR']"/>
                </xsl:if>
                <!-- FOOTER for notes -->
                <div class="footer">
    
                <!-- FOOTNOTES (uses mode="build_footnotes" to construct a block of footnotes in <div>) -->
                   <xsl:if test="$footnote-sources">
                     <div class="footnotes" id="footnotesdiv">
                         <xsl:apply-templates select="$footnote-sources" mode="build_footnotes"/>
                     </div>
                   </xsl:if>
                </div>
            </div>
    </xsl:template>
    

    that would then mean that my suggestion to use

    <xsl:template match="/">
        <xsl:apply-templates select="$fn-markers-added/node()"/>
    </xsl:template>
    

    can be kept and the XSLT processor would apply it.

    There is however the use of that variable $footnote-sources at the end of the template, as far as I can see from the snippet its use on nodes from the original input document would not be affected by the introduction of a temporary result adding markers but somehow to me it would feel wrong to at that place keep processing the original input while the rest works on the temporary result so I would be inclined to change the variable declaration to

    <xsl:variable name="footnote-sources" select="$fn-markers-added/tei:text//tei:seg//date[@type='deposition_date'] | 
        $fn-markers-added/tei:text//tei:seg//note[@type='public_note'] | $fn-markers-added/tei:text//tei:seg[@corresp]"/>
    

    With those two changes I think my suggestion in the previous answer should then be applied. Although now looking again at the posted source with a tei root element I wonder how a global variable having paths starting with tei:text would select anything but perhaps that is an omission in the sample.

    0 讨论(0)
提交回复
热议问题