DITA 专门化

借助 DITA 专门化机制,组织可以部署量身定制且符合 DITA 要求的信息模型。DITA 专门化能够满足组织的信息建模需求,同时使组织依然能够使用符合 DITA 要求的工具和工作流程。

事实上,所有 DITA 主题类型(例如 <task>、<concept>、<reference>)都是 <topic> 经过专门化后的结果。可以通过检查 DITA DTD 来查看这些专门化是如何实施的。接下来我将介绍每类 DITA 专门化的设计和实施细节。

专门化细节

所有 DITA 元素(<dita> 除外)都可以用作专门化的基础。

经过专门化的元素通过 @class 属性值与基础元素关联。处理是基于 @class 属性值进行的。如果经过专门化的某个元素无适用的处理规则,则将其视作基础元素处理。例如,基于 <ol> 专门化而来的列表结构默认情况下将呈现为有序列表。

经过专门化的元素的内容模型必须与其基础元素的内容模型一样严格或更加严格。专门化可以:

  • 省略可选元素。
  • 要求使用可选元素。
  • 重命名可选元素或必需元素。
  • 将可重复的元素转变成由经过专门化的元素组成的固定序列。

专门化无法:

  • 省略必需元素。
  • 向内容模型添加新的基础类型或新基础类型的专门化结果。

经过专门化的元素在允许使用其基础类型的任何位置均可合法使用。

为专门化设计的 DITA 元素

有些 DITA 元素明确作为专门化基础加以提供。例如,<data> 和 <foreign> 就属于这类元素,前者适用于不会在输出中呈现的元数据或属性,后者用于将非 DITA 内容集成到 DITA 文档中。

专门化的类型

DITA 提供了多种类型的专门化,这些类型分别适用于不同的情况,它们的实施规则也略有不同。

域专门化

借助域专门化,采用者可以创建自定义元素,通常用于表示有着特定用途或主题的域。例如,DITA 突出显示域(用途)和编程域(主题)就属于这类域。这些元素通常是基于 DITA <ph>(阶段)元素专门化而来。

结构化专门化

借助结构化专门化,采用者可以创建自定义的信息类型。

属性专门化

DITA 1.2 支持对属性进行专门化。过滤属性必须基于 @prop 属性进行专门化。其他属性必须基于 @base 进行专门化。经过专门化的属性在全局范围内可用。

约束

借助 DITA 约束机制,采用者可以约束 DITA 元素的内容模型。约束规则与专门化规则相同;约束只能比原始内容模型更严格。

在 Relax-NG 中实施 DITA 专门化

Relax-NG 是一种 XML 建模语言,可作为 XML DTD 或 W3C 架构的替代语言。Relax-NG 简化了 DITA 专门化定义过程的某些方面。我们会简要讨论基于 Relax-NG 的专门化,但这不是本次演示的重点。

资源