作为 DITA 领域最流行的开源发布工具,DITA-OT 一直紧紧跟随 DITA 的更新步伐。正因如此,当前市场上主流的 DITA 编辑软件和内容管理系统几乎都支持 DITA-OT,比如 Adobe FrameMaker 和 Oxygen XML Editor。

日前,DITA-OT 4.0 正式发布。它不仅支持轻量级 DITA 和 DITA 2.0 的最新定义,还新增了 PDF 主题插件 com.elovirta.pdf,优化了项目文件中 <publication> 元素的定义等。不过,DITA-OT 4.0 的运行环境也提升至 Java 17 及以上版本。

本文将详细说明 DITA-OT 4.0 的主要更新事项以及每项更新的影响,希望为 DITA 及 DITA-OT 使用者及服务商提供一些有价值的信息。

运行环境提升

要运行 DITA-OT 4.0,必须先安装 Java 17 及以上版本。目前,JDK 的最新版本是 Java 17(稳定版,也叫长期支持版本) 和 Java 19(短期支持版本)。

此前,对于 DITA-OT 3.7 及以下版本的运行环境,选择安装 JDK 或 JRE 均可。其中,JDK 适用于开发者,而 JRE 适用于终端用户。但由于 JRE 的最新版本是 8u351 (Java 8),不能满足 DITA-OT 4.0 对运行环境的要求。所以要运行 DITA-OT 4.0,只能安装 JDK

新增 PDF 主题插件

DITA-OT 4.0 新增了一款 PDF 主题插件:com.elovirta.pdf。有了这款插件,当需要为 PDF 文件自定义输出样式时,工作量将大大减少。

如果使用早期版本的 DITA-OT (比如 3.7) 输出 PDF 文件,当你想要自定义 PDF 文件的输出样式时,官方推荐的方法是创建一个新的 PDF 插件。在很多时候,这无疑会劝退很多新手以及只想进行小范围改动的人。

现在——使用 DITA-OT 4.0, 你只需要使用 YAML (推荐)或 JSON 编写一个主题样式文件,然后使用 --theme 选项指定主题样式文件的路径即可。

dita --input=输入文件的路径 ^
     --format=pdf ^
     --theme=主题样式文件的路径

在主题样式文件中,你可以自定义 PDF 文件的一些常规属性,比如页面尺寸、页边距、页眉页脚、封面图片、背景色、以及各种块元素和行内元素的格式等。

DITA-OT 4.0 的安装文件夹中提供了几个主题样式文件作为示例,其存储路径如下:
DITA-OT 安装文件夹/docsrc/samples/themes/

需要注意的是,主题样式文件使用的是 XSL-FO 中的(格式)属性定义,而不是 CSS 中的属性定义。

优化项目文件

项目文件适用于需要同时发布多种格式的文档项目,比如 PDF、HTML 和 HTML Help 等。

与属性文件(.properties)相比,项目文件的功能更强大。在属性文件中只能定义输出参数。而在项目文件中,不仅可以定义输出参数,还可以使用多个输入文件,并指定输出文件夹。不仅如此,项目文件还支持导入功能以增加项目中共性设置文件的重用率,以及一次性输出多种格式的文件。

项目文件是在 DITA-OT 3.4 及以上版本中增加的功能。DITA-OT 4.0 对项目文件中 <publication> 元素的定义进行了优化:

使用 @id@idref 属性可以对 <publication> 元素可以进行重用。重用时,新设置的 <param> 元素将会覆盖被重用的 <publication> 元素中的<param> 元素。

<project xmlns="https://www.dita-ot.org/project">
  <publication transtype="html5" id="common-html5">
    <param name="nav-toc" value="partial"/>
  </publication>
  <deliverable>
    <context>
      <input href="root.ditamap"/>
    </context>
    <output href="./out"/>
    <publication idref="common-html5">
      <!-- Define publication-specific parameter settings -->
      <param name="nav-toc" value="full"/>
    </publication>
  </deliverable>
</project>

<publication> 元素新增了一个子元素 <profile><profile> 元素也是 <publication> 的兄弟元素 <context> 的子元素,用来指定进行内容过滤的 DITAVAL 文件。如果 <publication><context> 元素中都有 <profile> 元素,<publication> 中的 <profile> 元素拥有更高的优先级。

<project xmlns="https://www.dita-ot.org/project">
  <deliverable name="Name" id="site">
    <context name="Site" id="site">
      <input href="site.ditamap"/>
      <profile>
        <ditaval href="site.ditaval"/>
      </profile>
    </context>
    <output href="./site"/>
    <publication transtype="html5" id="sitePub" name="Site">
      <profile>
        <!-- Define publication-specific filters -->
        <ditaval href="site-html5.ditaval"/>
      </profile>
    </publication>
  </deliverable>
</project>

优化代码引用的默认字符编码

代码引用(<coderef>)的默认字符编码由原来的系统默认字符编码调整为 UTF-8

如果要为代码引用指定字符编码,可以使用 @format 属性。如果 DITA-OT 4.0 不能识别或不支持 @format 属性指定的字符编码,将提示错误 DOTJ052E,并使用默认字符编码 UTF-8。

<coderef href="unicode.txt" format="txt; charset=ISO-8859-1" />

如果要更改代码引用的默认字符编码,可以在 configuration.properties 文件中设置 default.coderef-charset 的键值。

default.coderef-charset = ISO-8859-1

configuration.properties 文件的存储路径如下:
DITA-OT安装文件夹/config/configuration.properties

优化对轻量级 DITA 的支持

由于轻量级 DITA 至今尚未发布正式版本,DITA-OT 一直紧随轻量级 DITA 样稿(draft)的最新新展而不断更新。DITA-OT 4.0 也不例外。

除此之外,DITA-OT 4.0 还优化了以下内容:

  1. 支持省略了一级标题的 Markdown 文件。
  2. MDITA 不再支持行内代码。
  3. 更好的支持 Python-Markdown 属性设置。
  4. 更好地支持一些 Markdown 语法,比如上下标、行内代码(只针对 @format=markdown 的文件,MDITA 不再支持行内代码)和表格。

优化对 DITA 2.0 的支持

自 DITA-OT 3.5 开始支持 DITA 2.0 以来,DITA-OT 一直紧随 OASIS 在 DITA 2.0 上的最新工作进展而不断更新。DITA-OT 4.0 支持 OASIS 于 2022 年 11 月 7 日前完成提交的 DITA 2.0 DTD 以及 RELAX NG。

在 DITA 2.0 中,@chunk 属性拥有了全新的属性值:combinesplit。DITA-OT 4.0 现已支持 @chunk 的新属性值 split

对于 <map> 元素、<mapref> 元素以及含有子元素的 <topicref> 元素等, 如果它们的 @chunk 属性设置为 split,这些元素中的每个主题(Topic)均被输出为独立的文件。

需要注意的是,这一更新只对 DITA 2.0 文件有效。也就是说,文件中的 DOCTYPE 声明必须是 DITA 2.0 的文档类型定义文件。比如:

<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA 2.0 Map//EN" "map.dtd">