在 dita-ot 中,是否可以仅针对特定转换类型集成到功能扩展中?
In dita-ot is it possible to integrate into a feature extension for a specific transtype only?
具体来说,我有一个自定义 dita-ot xhtml 插件,它使用 <feature extension="dita.xsl.xhtml" file="xsl/header.xsl"/>
集成到 xhtml 管道中。但是这个扩展也被默认的 xhtml 输出使用。我不想要这个。有没有办法 运行 我的扩展仅适用于我自己的插件?
一个小示例(dita-ot 文档中的品牌header 示例)演示了所描述的行为:
plugin.xml:
<?xml version="1.0" encoding="UTF-8"?>
<plugin id="com.example.brandheader">
<feature extension="ant.import" file="build.xml" />
<feature extension="dita.xsl.xhtml" file="xsl/header.xsl"/>
<transtype name="xhtml-extension" />
</plugin>
build.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project name="com.example.xhtml.extension" basedir=".">
<target name="dita2xhtml-extension" depends="dita2xhtml"/>
</project>
header.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="gen-user-header">
<div>
<img src="https://www.dita-ot.org/images/dita-ot-logo.svg" alt="Example Company Banner"/>
</div>
</xsl:template>
</xsl:stylesheet>
自定义 header 出现在 xhtml
转换类型和 xhtml-extension
转换类型中。
我在 Whosebug 上搜索了类似的问题,并阅读了 dita-ot 开发人员文档。但是我找不到只为我的插件启用扩展的选项。
我对任何输入都很满意。
您的“header.xsl”XSLT 样式表确实会被考虑用于从基本 XHTML 样式表扩展的任何转换类型。
但是您可以做的是在 plugin.xml 中定义一个名为 dita.conductor.xhtml.param 的扩展点:
https://www.dita-ot.org/dev/extension-points/all-extension-points.html#all-extension-points__dita.conductor.xhtml.param
像这样:
<feature extension="dita.conductor.xhtml.param" value="params.xml" type="file"/>
并且 params.xml 文件可以包含:
然后在您的 XSLT 样式表中定义一个名为“TRANSTYPE”的全局 xsl:param 并且您应该在其上接收来自 DITA OT 构建文件的转换类型的值,从而可以在自定义中做出决定基于当前转换类型的 XSLT 模板。
另一种选择是在自定义 XHTML 插件的构建文件中覆盖用于处理的主 XSLT:
<target name="dita2xhtml-custom"
depends="dita2xhtml-custom.init,
dita2xhtml"/>
<target name="dita2xhtml-custom.init">
<property name="args.xsl"
location="${dita.plugin.com.example.xhtml-custom.dir}/custom-main.xsl"/>
</target>
和您的 custom-main.xsl 将导入 xhtml XSLT 样式表,如:
<xsl:import href="plugin:org.dita.xhtml:xsl/dita2xhtml.xsl"/>
并将您自己的模板添加到 custom-main.xsl 以覆盖 dita2xhtml.xsl 中的模板。
具体来说,我有一个自定义 dita-ot xhtml 插件,它使用 <feature extension="dita.xsl.xhtml" file="xsl/header.xsl"/>
集成到 xhtml 管道中。但是这个扩展也被默认的 xhtml 输出使用。我不想要这个。有没有办法 运行 我的扩展仅适用于我自己的插件?
一个小示例(dita-ot 文档中的品牌header 示例)演示了所描述的行为:
plugin.xml:
<?xml version="1.0" encoding="UTF-8"?>
<plugin id="com.example.brandheader">
<feature extension="ant.import" file="build.xml" />
<feature extension="dita.xsl.xhtml" file="xsl/header.xsl"/>
<transtype name="xhtml-extension" />
</plugin>
build.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project name="com.example.xhtml.extension" basedir=".">
<target name="dita2xhtml-extension" depends="dita2xhtml"/>
</project>
header.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="gen-user-header">
<div>
<img src="https://www.dita-ot.org/images/dita-ot-logo.svg" alt="Example Company Banner"/>
</div>
</xsl:template>
</xsl:stylesheet>
自定义 header 出现在 xhtml
转换类型和 xhtml-extension
转换类型中。
我在 Whosebug 上搜索了类似的问题,并阅读了 dita-ot 开发人员文档。但是我找不到只为我的插件启用扩展的选项。
我对任何输入都很满意。
您的“header.xsl”XSLT 样式表确实会被考虑用于从基本 XHTML 样式表扩展的任何转换类型。 但是您可以做的是在 plugin.xml 中定义一个名为 dita.conductor.xhtml.param 的扩展点: https://www.dita-ot.org/dev/extension-points/all-extension-points.html#all-extension-points__dita.conductor.xhtml.param 像这样:
<feature extension="dita.conductor.xhtml.param" value="params.xml" type="file"/>
并且 params.xml 文件可以包含:
然后在您的 XSLT 样式表中定义一个名为“TRANSTYPE”的全局 xsl:param 并且您应该在其上接收来自 DITA OT 构建文件的转换类型的值,从而可以在自定义中做出决定基于当前转换类型的 XSLT 模板。
另一种选择是在自定义 XHTML 插件的构建文件中覆盖用于处理的主 XSLT:
<target name="dita2xhtml-custom"
depends="dita2xhtml-custom.init,
dita2xhtml"/>
<target name="dita2xhtml-custom.init">
<property name="args.xsl"
location="${dita.plugin.com.example.xhtml-custom.dir}/custom-main.xsl"/>
</target>
和您的 custom-main.xsl 将导入 xhtml XSLT 样式表,如:
<xsl:import href="plugin:org.dita.xhtml:xsl/dita2xhtml.xsl"/>
并将您自己的模板添加到 custom-main.xsl 以覆盖 dita2xhtml.xsl 中的模板。