2

我正在尝试对 DocBook 进行细微的定制,我怀疑这很容易通过子类化<informaltable>元素来解决。有几个语句暗示使用该role属性对 DocBook 元素进行子类化是可能的。

暗示使用角色进行子类化的文档是可能的

示例 1 - 来自 DocBook 5.1:权威指南 - 自定义 DocBook

在 DocBook 的几乎所有元素上都可以找到角色属性,它是一个文本属性,可用于子类化元素。

示例 2 - 来自 DocBook 5.1:权威指南 - DocBook 元素参考

虽然角色在所有 DocBook 元素上都出现的意义上是一个公共属性,但定制者会发现它不是任何“公共属性”模式的一部分。它的参数化方式不同,因为能够在不同元素上独立地对角色进行子类化很有用。

示例 3 - CERN - 使用 DocBook 编写文档

大多数 DocBook 标记包含一组通用属性。最常用的此类通用属性是 lang,它指定元素内部数据的语言,id 标记元素以便它可以被其他元素引用,以及角色,它允许一个元素的子类,以使其信息方面更具体。

一般谷歌调查结果。

谷歌搜索“扩展 docbook 元素角色属性”的组合会出现有关处理新元素的模板的页面,但似乎没有出现除了下面的自定义示例之外的任何页面,甚至考虑使用role属性对元素进行子类化。

确实存在的自定义示例

存在自定义现有 DocBook 元素格式的示例,但这些是 XSLT 自定义,不涉及扩展 DocBook 模式。

还有一个添加元素的示例<sect6>,但它似乎过于冗长而无法成为有效的子类化方法,我怀疑从技术上讲该示例根本不是子类化。此外,该示例似乎没有对该role属性进行任何特殊使用。

使用role属性进行子类化真的可以实现吗?

从上面的例子中可以看出,DocBook 模式是专门为使用role属性来促进元素的子类化而设计的,但是,似乎没有公布具体的例子。

我是 XML 和 DocBook 的新手。对 DocBook 元素进行子类化是否如此微不足道以至于未被注意到?如果是这样,有人可以展示它是如何实现的吗?

role使用一个不起作用的好主意对DocBook 元素进行子类化吗?如果是这样,为什么它不起作用?

注1: 子类化是否<informaltable>是解决我原来问题的正确方法完全是另一个问题。

注 2: 我的问题中有更多超链接,但显然我的声誉不允许我发布超过 2 个 :(

4

1 回答 1

2

从上面的例子看来,DocBook 模式是专门为使用角色属性来促进元素的子类化而设计的,但是,似乎没有公布具体的例子。

TDG 的示例 5.14是一个非常具体的示例,它显示了如何约束元素role上的属性,<procedure>以便只允许两个值(默认情况下,允许任何值)。这种定制需要修改模式。<informaltable>如果你愿意,你可以做类似的事情。

没有什么能阻止你使用类似的东西

<informaltable role="myspecialtable">
 ...
</informaltable>

这是最简单的“子类化”;无需更改架构。应该如何role="myspecialtable"解释或处理完全取决于您。

还有一个添加<sect6>元素的示例,但它似乎过于冗长而无法成为有效的子类化方法,我怀疑从技术上讲该示例根本不是子类化。此外,该示例似乎没有对角色属性进行任何特殊使用。

那么你对子类化的想法是什么?

也许“子类化”这个词可能有点误导。DocBook 是一种标记系统,而不是一种编程语言。对 DocBook 元素进行子类化(定制)与在 Java 或 C++ 中创建子类之间的类比不应太过分。

没有什么神奇的role。它只是一个没有预定义语义的属性。为了创建 DocBook 定制,您不必对它做任何特别的事情。

对 DocBook 元素进行子类化是否如此微不足道以至于未被注意到?

你为什么这么说?整个“定制 DocBook”一章都是关于定制 DocBook 元素的。这不是被忽视的事情。

使用角色对 DocBook 元素进行子类化是一个好主意,但它不起作用吗?

它确实有效,但可能不是您期望的那样。

如上所述,只需确定role元素属性的特定值并在文档中使用它,您实际上就是在创建该元素的子类(自定义、变体)。而已。

如何使用自定义元素——如何对其进行转换、过滤、可视化等等——是另一回事。

于 2012-07-28T07:51:07.487 回答