根据古老的闪族语言的字母对单词进行排序

Sorting words according to letters of an old Semitic language

我使用 XSLT 3.0、Saxon-PE 9.7。

我需要根据乌加里特语排序orth,接近希伯来语但有额外的字符。

我试过:

 <xsl:sort select="orth" data-type="text" order="ascending" lang="uga"/>

但是建议的顺序不正确。所以我想我需要描述乌加里字母顺序。我能怎么做?

提前,非常感谢。

我不确定这是否是最好的解决方案,但这是我所知道的。

您要搜索的代码是:

      <xsl:sort select="((orth='character1') * 1) + ((orth='character2') * 2) + ((orth='character3') * 3) ..." data-type="text" order="ascending"/>

您需要对字母表中的每个字符执行此操作。乘法越低,它出现在结果中的时间就越早。基本上,您是在为指定值定义自己的顺序。

Saxon 允许您在其配置文件中定义自己的排序规则,您基本上必须设置一个配置文件,其中包含

 <collations>
      <collation uri="http://example.com/uga-trans"
      rules="&lt; ʾa &lt; b &lt; g &lt; ḫ &lt; d &lt; h &lt; w &lt; z &lt; ḥ &lt; ṭ &lt; y &lt; k &lt; š &lt; l &lt; m &lt; ḏ &lt; n &lt; ẓ &lt; s &lt; ʿ &lt; p &lt; ṣ &lt; q &lt; r &lt; ṯ &lt; ġ &lt; t &lt; ʾi &lt; ʾu &lt; s2"/>
 </collations>

其中 uri 属性将 URI 定义为排序规则的名称,然后您可以在 xsl:sort:

collation 属性中使用该名称
            <xsl:perform-sort select="$input-seq">
                <xsl:sort select="string()" collation="http://example.com/uga-trans"/>
            </xsl:perform-sort> 

rules 属性中使用的语法是为 Java class RuleBasedCollator https://docs.oracle.com/javase/7/docs/api/java/text/RuleBasedCollator.html 定义的语法,那里有一个示例对于挪威语。唯一需要注意的是,Java 语法是纯文本,而 Saxon 配置是 XML,因此定义顺序的 < 必须在 rules 属性中转义为 &lt;.

我已经根据维基百科文章 https://en.wikipedia.org/wiki/Ugaritic_alphabet 中提供的转录序列设置了上面的规则。我不确定这是否是您要找的人。

您可以从命令行 运行 Saxon -config:yourconfiguationfile.xml 使用这样的配置,oXygen 在 Saxon 特定转换场景对话框中有一个字段到 select 配置文件。