XSL 使用变音符号建立索引并删除定冠词
XSL Setting up an Index with Umlaut and removing definite article
正如我在上一个问题中提到的,我需要设置从 T.E.I 到 XeLaTex 的 XSLT。我未能解决的一个问题是如何处理变音符号和定冠词 "the"。假设我想将 "The beauty queen" 放入索引中,在德语中它将是 "Die Schönheitskönigin"。
所需的输出以排序顺序开始,然后写入索引中显示的内容:
\index{Schoenheitskoenigin@Die Schönheitskönigin}
因此德语变音符号应替换为 "ae"、"oe"、"ue"、“ß”替换为 "ss" 以及冠词 "der"、"die", "das" 应该从排序部分去掉。
我使用 XSLT 2.0 并进行查找以获取索引条目。使用下面提供的解决方案可以产生正确的输出:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:param name="persons" select="document('person.xml')"/>
<xsl:key name="person-lookup" match="row" use="number"/>
<xsl:template match="persName">
<xsl:variable name="s1" select="key('person-lookup', @key, $persons)/name"/>
<xsl:value-of select="."/>
<xsl:text>\index{</xsl:text>
<xsl:value-of select="replace(replace(replace(replace(replace(replace(replace(replace($s1,'ä','ae'), 'ö', 'oe'), 'ü', 'ue'), 'ß', 'ss'), 'Ä', 'Ae'), 'Ü', 'Ue'), 'Ö', 'Oe')'^(Die |Der |Das )', '')"/>
<xsl:text>@</xsl:text>
<xsl:value-of select=""/>
<xsl:text>}</xsl:text>
</xsl:template>
</xsl:stylesheet>
其中 person.xml 是:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<row>
<number>A01</number>
<name>Die Schönheitskönigin Ilse</name>
</row>
</root>
main.xml 类似于:
<?xml version="1.0" encoding="UTF-8"?>
<persName key="A01>Ilse</persName> hatte einen schlechten Tag.
要从输入中删除领先的权威文章,您可以使用:
<xsl:value-of select="replace($input, '^(Die |Der |Das )', '')" />
也对变音字符使用 replace()
函数。
正如我在上一个问题中提到的,我需要设置从 T.E.I 到 XeLaTex 的 XSLT。我未能解决的一个问题是如何处理变音符号和定冠词 "the"。假设我想将 "The beauty queen" 放入索引中,在德语中它将是 "Die Schönheitskönigin"。 所需的输出以排序顺序开始,然后写入索引中显示的内容:
\index{Schoenheitskoenigin@Die Schönheitskönigin}
因此德语变音符号应替换为 "ae"、"oe"、"ue"、“ß”替换为 "ss" 以及冠词 "der"、"die", "das" 应该从排序部分去掉。
我使用 XSLT 2.0 并进行查找以获取索引条目。使用下面提供的解决方案可以产生正确的输出:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:param name="persons" select="document('person.xml')"/>
<xsl:key name="person-lookup" match="row" use="number"/>
<xsl:template match="persName">
<xsl:variable name="s1" select="key('person-lookup', @key, $persons)/name"/>
<xsl:value-of select="."/>
<xsl:text>\index{</xsl:text>
<xsl:value-of select="replace(replace(replace(replace(replace(replace(replace(replace($s1,'ä','ae'), 'ö', 'oe'), 'ü', 'ue'), 'ß', 'ss'), 'Ä', 'Ae'), 'Ü', 'Ue'), 'Ö', 'Oe')'^(Die |Der |Das )', '')"/>
<xsl:text>@</xsl:text>
<xsl:value-of select=""/>
<xsl:text>}</xsl:text>
</xsl:template>
</xsl:stylesheet>
其中 person.xml 是:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<row>
<number>A01</number>
<name>Die Schönheitskönigin Ilse</name>
</row>
</root>
main.xml 类似于:
<?xml version="1.0" encoding="UTF-8"?>
<persName key="A01>Ilse</persName> hatte einen schlechten Tag.
要从输入中删除领先的权威文章,您可以使用:
<xsl:value-of select="replace($input, '^(Die |Der |Das )', '')" />
也对变音字符使用 replace()
函数。