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

基于拉丁化字符自动为TEI元素添加@correspUnic属性求助

解决方案与XSL代码修改建议

核心思路

通过身份转换模板保留原TEI文档的所有结构,再针对指定元素(w/g/unclear/name/seg/supplied)单独处理,添加@correspUnic属性——属性值通过预定义的拉丁字符与乌加里特Unicode十进制编码的映射,转换元素内的文本内容得到。

完整XSL代码示例

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:tei="http://www.tei-c.org/ns/1.0">
    <!-- 身份转换:默认复制所有节点、属性、文本 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 定义拉丁字符到乌加里特Unicode十进制编码的映射表 -->
    <!-- 请根据你的拉丁化方案调整对应关系,以下为示例 -->
    <xsl:variable name="char-map">
        <map entry="a" code="73728"/> <!-- U+12000 乌加里特字母Aleph -->
        <map entry="b" code="73729"/> <!-- U+12001 乌加里特字母Beth -->
        <map entry="g" code="73730"/> <!-- U+12002 乌加里特字母Gimel -->
        <map entry="d" code="73731"/> <!-- U+12003 乌加里特字母Daleth -->
        <!-- 继续添加其他字符的映射 -->
    </xsl:variable>
    <xsl:key name="char-code" match="map" use="@entry"/>

    <!-- 匹配目标TEI元素,添加correspUnic属性 -->
    <xsl:template match="tei:w|tei:g|tei:unclear|tei:name|tei:seg|tei:supplied">
        <xsl:copy>
            <!-- 复制原元素的所有属性 -->
            <xsl:apply-templates select="@*"/>
            <!-- 生成correspUnic属性 -->
            <xsl:attribute name="correspUnic">
                <xsl:value-of select="
                    string-join(
                        for $char in string-to-codepoints(.) return
                            if (key('char-code', codepoints-to-string($char), $char-map))
                            then key('char-code', codepoints-to-string($char), $char-map)/@code
                            else '' <!-- 无映射的字符留空或做其他处理 -->
                        , ' '
                    )
                "/>
            </xsl:attribute>
            <!-- 复制原元素的子内容 -->
            <xsl:apply-templates select="node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

关键修改点与注意事项

  • 映射表调整:你必须根据自己使用的拉丁化转写规则,完善<xsl:variable name="char-map">里的对应关系,确保每个拉丁字符都匹配正确的乌加里特Unicode十进制编码。
  • XSLT版本:代码使用XSLT 2.0特性(string-to-codepoints/codepoints-to-string/for-each循环),Oxygen XML Editor 23.1完全支持,需确保在转换配置中选择XSLT 2.0处理器。
  • 字符大小写处理:如果你的拉丁化文本包含大写字母,可在映射表中添加大写条目,或在转换时用lower-case(.)统一转小写后匹配。
  • 无效代码排查:你的原有代码无效可能的原因:
    • 未正确绑定TEI命名空间(需在xsl:stylesheet中声明xmlns:tei="http://www.tei-c.org/ns/1.0",否则匹配不到TEI元素)
    • 字符映射逻辑错误(比如用了不支持的字符串处理方式,或映射表查找失败)
    • 未保留原元素的属性和子节点(身份转换模板缺失导致结构丢失)

测试验证

  1. 在Oxygen中打开你的TEI文档,加载上述XSL代码
  2. 运行XSL转换,查看目标元素是否正确添加@correspUnic属性
  3. 若部分字符未转换,检查映射表的entry值是否与文本字符完全匹配(注意空格、特殊符号等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:22:49