You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TEI指针模式解析:是否有XSLT(≤2.0)实现方案?

TEI指针模式的XSLT 2.0及以下版本实现方案
  • 针对TEI推荐的各类扩展指针模式(比如@corresp="#range(#id1, #id5)"这类范围指针),确实有可直接复用的XSLT 2.0实现思路,无需依赖外部工具。
  • 核心实现逻辑分为两步:首先通过字符串匹配提取指针中的关键参数,再结合XSLT内置函数定位目标节点。
  • 以range()指针为例,可编写如下自定义函数解析:
<xsl:function name="tei:resolve-range-pointer" as="node()*">
  <xsl:param name="pointer" as="xs:string"/>
  <!-- 匹配range格式的指针语法 -->
  <xsl:if test="matches($pointer, '^#range\(#([^,]+), #([^)]+)\)$')">
    <!-- 提取起始和结束节点的ID -->
    <xsl:variable name="start-id" select="replace($pointer, '^#range\(#([^,]+), #([^)]+)\)$', '$1')"/>
    <xsl:variable name="end-id" select="replace($pointer, '^#range\(#([^,]+), #([^)]+)\)$', '$2')"/>
    <!-- 获取文档顺序中从起始到结束的所有节点序列 -->
    <xsl:sequence select="
      id($start-id) | 
      id($start-id)/following-sibling::node()[. << id($end-id)] | 
      id($end-id)
    "/>
  </xsl:if>
</xsl:function>
  • 在处理TEI元素的@corresp属性时,可通过条件判断调用对应解析逻辑:
<xsl:template match="*[@corresp]">
  <xsl:variable name="target-nodes" as="node()*">
    <xsl:choose>
      <xsl:when test="matches(@corresp, '^#range\(.*\)$')">
        <xsl:sequence select="tei:resolve-range-pointer(@corresp)"/>
      </xsl:when>
      <xsl:otherwise>
        <!-- 处理普通单个ID指针 -->
        <xsl:sequence select="id(substring-after(@corresp, '#'))"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>
  <!-- 此处添加对目标节点的后续处理逻辑 -->
</xsl:template>
  • 对于TEI支持的其他指针模式(如xpath()),XSLT 2.0可直接通过xsl:evaluate指令执行提取出的XPath表达式,实现快速解析。
  • 注意:如果range()指针跨越的节点并非同层级连续结构,需要根据实际文档结构调整节点序列的筛选逻辑,确保覆盖所有符合范围的节点。

内容的提问来源于stack exchange,提问作者oleksii.sapov-erlinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:52:43