我使用 XSLT 3.0、Saxon-PE 9.7。
我需要orth
根据乌加里特语进行排序,接近希伯来语但有额外的字符。
我努力了:
<xsl:sort select="orth" data-type="text" order="ascending" lang="uga"/>
但是建议的顺序是不正确的。所以我想我需要描述一下乌加里特字母顺序。我能怎么做?
在此先感谢您。
Saxon 允许您在其配置文件中定义自己的排序规则,您基本上必须设置一个配置文件,其中包含类似的部分
<collations>
<collation uri="http://example.com/uga-trans"
rules="< ʾa < b < g < ḫ < d < h < w < z < ḥ < ṭ < y < k < š < l < m < ḏ < n < ẓ < s < ʿ < p < ṣ < q < r < ṯ < ġ < t < ʾi < ʾu < s2"/>
</collations>
其中uri
属性将 URI 定义为排序规则的名称,然后您可以在 的collation
属性中使用xsl:sort
:
<xsl:perform-sort select="$input-seq">
<xsl:sort select="string()" collation="http://example.com/uga-trans"/>
</xsl:perform-sort>
属性中使用的语法rules
是为 Java 类定义的语法RuleBasedCollator
https://docs.oracle.com/javase/7/docs/api/java/text/RuleBasedCollator.html,它有一个挪威语的例子。唯一需要注意的是,Java 语法是纯文本,而 Saxon 配置是 XML,因此<
定义排序必须在rules
属性中转义为<
.
我已经根据维基百科文章https://en.wikipedia.org/wiki/Ugaritic_alphabet中提供的转录序列设置了一个规则。我不确定这是否是你要找的那个。
您可以从命令行运行 Saxon-config:yourconfiguationfile.xml
以使用这样的配置,oXygen 在 Saxon 特定转换场景对话框中有一个字段来选择配置文件。
我不确定这是否是最好的解决方案,但这就是我所知道的。
您正在搜索的代码是:
<xsl:sort select="((orth='character1') * 1) + ((orth='character2') * 2) + ((orth='character3') * 3) ..." data-type="text" order="ascending"/>
您需要对字母表的每个字符执行此操作。乘法越低,它出现在结果中的时间就越早。基本上,您正在为指定值定义自己的顺序。