xdmp:变音符号少,给出了意外的结果

时间:2018-07-20 09:34:02

标签: marklogic

我正在使用ML 8.0-6.3

字符:ı

word:Araştırmalari

xdmp:diacritic-less()并未将上述变音符号转换为小写i

最初,我认为这不是有效的变音符号。但是根据此网站diacritic characters,它是有效的变音符号。

在链接中看到该行

  

0131ıdotlessi小写字母DOTLESS I

请对此进行更多说明。

由于此diacritic-insensitive查询无法正常工作。

2 个答案:

答案 0 :(得分:2)

通常,人们希望删除变音符号,但是我看不到有任何变音符号。

无论如何,这是Unicode标准所涵盖的,而不是看起来是否相似。看一下Block U0100。您需要能够将字符分解为基本字符和变音符号,例如0130。0131甚至没有兼容级别都没有。

图表上的信息位于About the Unicode charts

答案 1 :(得分:1)

无点的我有点奇怪。

https://www.unicode.org/charts/PDF/U0100.pdf

  

0131ı拉丁文小写字母I

     
      
  • 土耳其语,阿塞拜疆

  •   
  • 大写字母是0049 I

  •   
     

→0069我是拉丁文小写字母i

https://en.wikipedia.org/wiki/Dotted_and_dotless_I

  

在通常的排版中,当小写字母i与其他变音符号结合使用时,通常会在添加变音符号之前删除点;但是,Unicode仍然列出了包括点号i的等效组合序列,因为从逻辑上说,它是被修改的普通点号i字符。      

大多数Unicode软件将ı到I大写,将İ到i小写,但是,除非特别为土耳其语进行了配置,否则它将I到i小写,将i到I大写。因此,先大写然后小写,反之亦然。

因此,尽管它不是变音符,但您可以通过一系列调用来运行该字符串以更改大写/小写,从而导致将ı转换为I,然后转换成{{1 }}。

i将产生:upper-case("Araştırmalari") => lower-case() => xdmp:diacritic-less()

但是,这将导致一个arastirmalari字符串值,这可能不是您想要的,但是如果用作搜索词,则可能对您有用。

更好的解决方案:

如果存在特定的(非变音符)字符,例如无点i lower-case(),但通过调用ı并未将其标准化为期望的字符,则您可以应用您的使用fn:translate()对变音符进行规范化后,自己替换字符:

xdmp:diacritic-less()

返回:fn:translate(xdmp:diacritic-less("Araştırmalari"), "ı", "i")