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

希伯来圣经XML格式转TEI P5格式方案及Oxgarage转换希伯来文排版异常问题咨询

我刚好处理过类似的希伯来圣经XML转TEI P5的需求,分享几个实用的方案和针对你特定场景的解决办法:

一、通用希伯来圣经XML转TEI P5的可行方法

  • XSLT转换(最可控的方案):TEI本身基于XML,XSLT是映射不同XML结构的标准工具。你可以自定义XSLT样式表,把原XML里的书、章节、经文等节点,精准对应到TEI的<text>、<body>、<div type="book">、<div type="chapter">、<l type="verse">等标准元素上。如果不想从零编写,可参考开源圣经TEI项目的现有XSLT模板,修改适配你的源格式即可。
  • 专用TEI工具链:推荐用Oxygen XML Editor或者TEI Publisher这类工具,它们内置了TEI的语法验证和转换向导。比如Oxygen可以直接导入你的源XML,通过“转换场景”配置XSLT,实时预览转换结果,还能自动检查TEI P5的合规性,适合边调整边验证。
  • Python脚本半自动化转换:如果你的源XML结构规整,也可以用Python的lxml库解析数据,再生成TEI格式。比如遍历源文件的<book>、<c>、<v>节点,然后构建TEI的层级结构,这种方法适合需要自定义处理特殊标记(比如你的<q>、<k>)的场景。

二、针对Tanach.us XML结构的具体转换步骤

先明确源结构和标准TEI的映射关系:

  • <Tanach> → <TEI>(记得添加TEI命名空间http://www.tei-c.org/ns/1.0)
  • 原<teiHeader>直接复用,移到<TEI>节点下
  • <tanach> → <text>
  • <book> → <div type="book">,内部的<names>可以作为<head>(书名)
  • <c>(章节)→ <div type="chapter">
  • <v>(经文)→ <l type="verse">(TEI中经文常用行元素标记)
  • <w>、<q>、<k>等希伯来文节点,可直接保留,也可以映射到TEI标准元素(比如<q>对应TEI的<q>,<k>如果是关键词可用<term>)

给你一个简化的XSLT示例片段,你可以在此基础上扩展:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/Tanach">
    <!-- 标准TEI根节点,必须加命名空间 -->
    <TEI xmlns="http://www.tei-c.org/ns/1.0">
      <!-- 直接复制原teiHeader -->
      <xsl:copy-of select="teiHeader"/>
      <!-- 构建TEI文本部分,添加希伯来文语言标记 -->
      <text xml:lang="he">
        <body>
          <!-- 遍历每一卷书 -->
          <xsl:for-each select="tanach/book">
            <div type="book">
              <head><xsl:value-of select="names"/></head>
              <!-- 遍历章节,传递章节号属性 -->
              <xsl:for-each select="c">
                <div type="chapter" n="{@n}">
                  <!-- 遍历经文,传递经文号属性 -->
                  <xsl:for-each select="v">
                    <l type="verse" n="{@n}">
                      <!-- 保留所有希伯来文子节点 -->
                      <xsl:copy-of select="*"/>
                    </l>
                  </xsl:for-each>
                </div>
              </xsl:for-each>
            </div>
          </xsl:for-each>
        </body>
      </text>
    </TEI>
  </xsl:template>
</xsl:stylesheet>

注意:如果源节点有章节号、经文号的属性(比如<c n="1">),可以通过{@n}把属性值传递到TEI的<div>或<l>的n属性中,更符合TEI规范。

三、Oxgarage转换希伯来文排版错乱的解决办法

Oxgarage对双向文本(RTL)的支持默认不够完善,导致希伯来文排版错乱,你可以尝试以下几种解决方式:

  • 提前添加语言和方向属性:在转换前(或通过XSLT转换时),给<text>节点添加xml:lang="he",给包含希伯来文的元素添加dir="rtl"属性。TEI标准支持这些属性,Oxgarage处理带语言标记的TEI时,会正确识别从右到左的排版规则。
  • 自定义Oxgarage的XSL-FO配置:如果Oxgarage是通过XSL-FO生成PDF等输出,可以修改转换用的XSL-FO样式表,给希伯来文文本块添加direction="rtl"和writing-mode="rl-tb"属性,强制设置排版方向。
  • 换用更适配的TEI工具:如果Oxgarage的问题无法解决,建议直接用Oxygen XML Editor或TEI Publisher来转换,它们对非拉丁语言的双向文本支持更成熟,能完美处理希伯来文的从右到左排版。
  • 转换后手动修正:如果已经完成转换,用Oxygen打开TEI文件,选中希伯来文段落,在属性面板设置dir="rtl"和xml:lang="he",再重新导出即可修正排版。

内容的提问来源于stack exchange,提问作者user jha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:52:38