我使用XSLT 3.0,Saxon-PE 9.7。
我需要根据Ugaritic语言对orth
进行排序,接近希伯来语,但附加字符。
我试过了:
<xsl:sort select="orth" data-type="text" order="ascending" lang="uga"/>
但建议的订单不正确。所以我想我需要描述Ugaritic字母顺序。我能怎么做?
事先,非常感谢你。
答案 0 :(得分:1)
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
的{{1}}属性中使用的排序规则的名称:
xsl:sort
<xsl:perform-sort select="$input-seq">
<xsl:sort select="string()" collation="http://example.com/uga-trans"/>
</xsl:perform-sort>
属性中使用的语法是为Java类rules
https://docs.oracle.com/javase/7/docs/api/java/text/RuleBasedCollator.html定义的语法,它有一个挪威语的例子。唯一需要注意的是,Java语法是纯文本,而Saxon配置是XML,因此定义排序的RuleBasedCollator
必须在<
属性中转义为rules
。
我已根据维基百科文章https://en.wikipedia.org/wiki/Ugaritic_alphabet中提供的转录序列建立了规则。这是否是你正在寻找的那个我不确定。
您可以使用<
从命令行运行Saxon以使用此类配置,oXygen在Saxon特定转换方案对话框中有一个字段来选择配置文件。
答案 1 :(得分:-1)
我不确定这是否是最好的解决方案,但那就是我所知道的。
您要搜索的代码是:
<xsl:sort select="((orth='character1') * 1) + ((orth='character2') * 2) + ((orth='character3') * 3) ..." data-type="text" order="ascending"/>
您需要为字母表中的每个字符执行此操作。乘法越低,它在结果中出现得越早。基本上,您正在为指定的值定义自己的订单。