如何在DITA OT将DITA转换为EPUB时忽略指定主题
嘿,要在DITA OT转换DITA到EPUB时忽略特定主题,我这儿有几个实用的方案,你可以根据自己的场景选:
方法1:用DITA条件属性+转换参数过滤
DITA原生支持条件属性(比如audience、platform、props,也可以自定义),你可以给要忽略的<topicref>打上标记,然后在转换时通过参数排除这类内容。
步骤很简单:
- 给目标主题引用加条件属性,比如用
audience="internal"标记内部专属的主题:
<topicref href="topics/topic_1.dita" audience="internal"> <topicmeta> <navtitle>Ram-Files-Raj (RFR)</navtitle> </topicmeta> </topicref>
- 运行转换时,添加参数排除
audience="internal"的内容:
dita --input=your-pubmap.ditamap --format=epub --filter=audience="-internal"
或者用更明确的DITA OT参数写法:
dita --input=your-pubmap.ditamap --format=epub -Ddita.filter=audience="-internal"
方法2:outputclass+自定义XSLT过滤
如果条件属性不符合你的需求,你可以用outputclass标记要排除的主题,再写个简单的XSLT来过滤它们。
操作步骤:
- 给要忽略的
<topicref>加专属outputclass:
<topicref href="topics/topic_1.dita" outputclass="exclude-from-epub"> <topicmeta> <navtitle>Ram-Files-Raj (RFR)</navtitle> </topicmeta> </topicref>
- 创建一个XSLT文件(比如命名为
filter-epub-topics.xsl),内容如下:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dita="http://dita.oasis-open.org/architecture/2005/"> <!-- 匹配所有带exclude-from-epub标记的topicref,不输出这些节点 --> <xsl:template match="*[contains(@outputclass, 'exclude-from-epub')]" priority="10"/> <!-- 保留其他所有节点的默认处理逻辑 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
- 转换时指定这个XSLT作为预处理脚本:
dita --input=your-pubmap.ditamap --format=epub -Ddita.preprocess.xsl=filter-epub-topics.xsl
方法3:直接用processing-role="resource-only"(适合引用类主题)
如果这个主题只是被其他主题引用,但不需要出现在EPUB的导航和正文里,直接给<topicref>加processing-role="resource-only"就行:
<topicref href="topics/topic_1.dita" processing-role="resource-only"> <topicmeta> <navtitle>Ram-Files-Raj (RFR)</navtitle> </topicmeta> </topicref>
这个属性会让DITA OT只处理主题的引用内容,但不会把整个主题加入EPUB的输出结构。如果这个主题没被任何其他主题引用,它会被完全忽略,刚好符合需求。
方法4:直接指定排除主题路径(适合少量主题)
如果只是要忽略一两个特定主题,直接用DITA OT的exclude-topic参数就行:
dita --input=your-pubmap.ditamap --format=epub -Dexclude-topic=topics/topic_1.dita
要排除多个的话,用逗号分隔路径:
dita --input=your-pubmap.ditamap --format=epub -Dexclude-topic=topics/topic_1.dita,topics/topic_2.dita
内容的提问来源于stack exchange,提问作者User515
相关产品推荐
相关产品推荐

