当我将来自不同名称空间的 XML 元素添加到 XSLT 文件时,是否需要预料到问题?或者他们只是被忽略了(因为会很棒)?
背景:在大型项目中,用户可以使用用户定义的标签进行文本格式化等(例如\textbf{bold}
。它们首先转换为 XML 中的特定方言(首先使用专有工具,然后使用 XSLT),然后可能转换为其他方言如latex、framemaker、BB码、...
因此,目前有以下文件:
- 专有工具的配置文件,转换
\textbf{bold}
为<Cmd Name="strong"><param Nr="1">bold</param></Cmd>
- XSLT 文件将上面的 XML 代码转换为
<myns:strong>bold</myns:strong>
- 描述允许的标签和格式的 XSD 文件
- 多个 xsl 文件,用于转换
<myns:strong>bold</myns:strong>
为不同的输出格式(例如返回到\textbf{bold}
)
维护这些文件非常困难,因为没有真正的 1:1 映射,添加新命令需要以正确的方式更改多个文件。
因此我的想法是合并这些。例如,单个 XML 文件将包含:
<!-- config file for proprietary tool -->
<repl:Cmd Name="strong"><repl:Param Nr="1"/></repl:Cmd>
<!-- converting to XML dialect -->
<xsl:template mode="Text" match="Cmd[@Name = 'textbf']">
<myns:strong>
<xsl:apply-templates select="Param[@Nr='1']" mode="Text"/>
</myns:strong>
</xsl:template>
<!-- XSD schema for validating XML -->
<xsd:element name="strong" type="tns:GenericTextType">
</xsd:element>
<!-- converting XML dialect to latex code -->
<xsl:template match="myns:strong" mode="Text_toLatex">
<xsl:text disable-output-escaping="yes">\textbf{</xsl:text>
<xsl:apply-templates mode="Text_toLatex"/>
<xsl:text disable-output-escaping="yes">}</xsl:text>
</xsl:template>
这将更容易维护。