XSLT 2.0协调多种模式

时间:2018-10-22 07:33:38

标签: xslt xslt-2.0 tei

XSLT 2.0,样式表和数据位于https://xsltfiddle.liberty-development.net/bFDb2D3/4

我正在将以tei-xml编码的中世纪文档转换为网页,用户可以在其中切换文档的两种不同视图,以及查看翻译和各种脚注(eg)。这需要多层处理才能输出:

  • 用户可以在两个拉丁版本(“ inter”和“ diplo”)之间进行切换(源自相同的tei标记)
  • 几乎没有任何转换的翻译版本(只是段落格式和斜体)
  • 使用脚注#a,b,c等的关键设备
  • 使用脚注#1、2、3等的历史脚注

我正在使用modes来处理处理级别,每种模式都可以正常工作,但是它们在一起都缺少输出。

输出内容:

  1. <div class="inter"><p>和所有转换模式inter + fn-add-marker [其中应包含<a href>,文本中的上标字母和数字]

  2. <div class="diplo"><p>和所有转换模式diplo + fn-add-marker [应包含[文本],行号,上标字母和文本中的数字]

  3. <div><p>及其翻译

  4. <div>和关键设备

  5. <div>(带脚注)

XSLTfiddle输出为:

  1. URL和上标字母好! 缺少上标数字(模式fn-add-marker
  2. 上标字母好!行号和[文本]可以除外,除非<persName><placeName> 中的地方(即<xsl:template match="tei:lb"> <xsl:template match="tei:supplied">)和缺少上标数字< / strong>(模式fn-add-marker
  3. 好的!
  4. 好的!
  5. 好的!

关于#2,缺少的行#和[文本]似乎是由于处理<persName><placeName>的模板没有移交给其他模板引起的? (第173-218行的模板)

关于模式fn-add-marker的所有模板都在第41-77行。

非常感谢。

1 个答案:

答案 0 :(得分:2)

基本上,在XSLT 2中,一旦您使用命名模式,就需要确保模板属于某个模式,例如mode="foo",例如您使用在任何mode="foo"内部使用mode="#current"或更通用的xsl:apply-templates,以确保处理以该模式继续进行。有关详细信息,请参见https://www.w3.org/TR/xslt20/#element-apply-templates

https://xsltfiddle.liberty-development.net/gWmuiK7,我尝试使用XSLT修复您的样式表,然后在https://xsltfiddle.liberty-development.net/bFDb2D3/5,您可以看到应用固定样式表的结果。不确定编程方法是否是正确的工具,但可能有助于在mode上展示建议的使用模式xsl:apply-templates

然后我认为您需要确保以两种新模式处理添加的标记:

<!-- adds fn numbers -->
<xsl:template match="tei:date[@type='deposition_date']" mode="inter dilpo">
    <xsl:apply-templates mode="#current"/>
    <xsl:apply-templates select="." mode="number"/>
</xsl:template>

<xsl:template match="tei:note[@type='public'] | tei:fn-marker" mode="inter diplo">
    <xsl:apply-templates select="." mode="number"/>
</xsl:template>

<xsl:template match="tei:date[@type='deposition_date'] |  tei:note[@type='public'] | tei:fn-marker" mode="number">
    <sup>
       <xsl:number count="tei:date[@type='deposition_date'] |  tei:note[@type='public'] | tei:fn-marker" format="1" level="any"/>
    </sup>
</xsl:template>
<!-- end of footnote transformations -->

https://xsltfiddle.liberty-development.net/bFDb2D3/6第51至66行。