代码之家  ›  专栏  ›  技术社区  ›  Vanessa

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

  •  2
  • Vanessa  · 技术社区  · 8 年前

    我使用XSLT 3.0、Saxon PE 9.7。

    我需要分类 orth 根据乌加里特语,接近希伯来语,但有附加字符。

    我尝试过:

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

    但提议的命令是不正确的。所以我想我需要描述一下乌加里特语的字母顺序。我该怎么办?

    提前,非常感谢。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Martin Honnen    8 年前

    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定义为排序规则的名称,然后可以在 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,因此 < 要定义排序,必须在 规则 属性为 &lt; .

    我根据维基百科文章中的转录序列建立了上述规则 https://en.wikipedia.org/wiki/Ugaritic_alphabet . 我不确定那是不是你要找的那个。

    您可以通过以下命令行运行Saxon -config:yourconfiguationfile.xml 要使用这样的配置,oXygen在特定于Saxon的转换场景对话框中有一个字段来选择配置文件。

        2
  •  -1
  •   Christian Mosz    8 年前

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

    您正在搜索的代码是:

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

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