我们正在构建一个系统,它从数据库中获取 XML 数据,使用 XSLT 将其转换为 XHTML,同时使用外部 XML 文件来检索特定于文化的标签(我们标签的翻译)。
简短
的问题 翻译/文化特定系统看起来合乎逻辑吗?高效的 ?
欢迎任何替代概念(在此特定上下文中)
详细问题
XML 数据
<page id="55" objecttype="ChristianOrthodoxMonument">
<field name="uniquename">some unique name here</field>
.. multiple field elements here ..
</page>
XML 文化标签
<ChristianOrthodoxMonument>
<uniquename culture-1="Ονομασία" culture-2="Unique name" />
<birthdate culture-1="Ημ/νία γέννησης" culture-2="Date of birth" />
</ChristianOrthodoxMonument>
现在在 XSLT 中,我传递了cultureid
用于映射到标签的参数。
XSLT(示例片段)
<xsl:param name="cultureid" select="1" />
<xsl:variable name="objecttype" select="/page/@objecttype" />
并映射到包含的外部文件
<xsl:variable name="culture" select="document('cultural-labels.xml')" />
我创建了一个伪动态 xpath
<xsl:template name="translate">
<xsl:variable name="nodename" select="@name" />
<xsl:value-of select="$culture/*[name()=$objecttype]/*[name()=$nodename]/@*[name()=concat('culture-',$cultureid)]" />
</xsl:template>
每当我想获取字段的标签时,我都会调用它。
问题 A:这个 xpath 是高效的还是矫枉过正的?过于复杂?
问题 B:这个模型看起来是正确的,还是我遗漏了一些重要的东西,而这些东西在未来会被证明是一个障碍?
问题 C:是否有关于与外部 XML 文件类似的映射技术的任何理论/示例?
使用复合键的第二次更新
钥匙
<xsl:key name="find-node" match="*" use="concat(name(..),'!',name())" />
抬头
<xsl:template name="lookup-label">
<xsl:param name="objecttype" />
<xsl:variable name="nodename" select="@name" />
<xsl:for-each select="$culture">
<xsl:value-of select="key('find-node',concat($objecttype,'!',$nodename))/@*[name()=$culturefield]" />
</xsl:for-each>
</xsl:template>
这是一种改进吗?