DocBook
什么是DocBook
DocBook 是一种模式(在多种语言下可用,包括RELAX NG、SGML 和 XML DTDs ,以及 W3C XML 模式),它由OASIS 的DocBook 技术委员会维护。它非常适合于关于计算机硬件和软件的书籍和论文(虽然它绝不限于这些应用)。因为它是一个大而强壮的模式,因为它的主要结构符合一般概念所构成的"书",DocBook 已被一个庞大而且还在成长中的作者群用于所有种类书籍的编写。DocBook 由一系列商业工具支持"out of box",并且大量自由软件环境也在迅速扩大对它的支持。这些特性结合起来使得 DocBook 成为一种易于理解、广泛应用和非常受欢迎的模式。全世界有许多组织将 DocBook 用于数百万页的文档,这些文档有不同的打印和在线格式。
RELAX NG
“可扩展标记语言的下一代正规语言”是一种基于语法的可扩展标记语言模式语言,可用于描述、定义和限制 可扩展标记语言(标准通用标记语言的子集)词汇表。通过本文了解某些人不喜欢使用文档类型定义(外语缩写:DTD)的原因,以及“可扩展标记语言的下一代正规语言”如何针对它进行改善。
•中文名:可扩展标记语言的下一代正规语言
•外文名:REgular LAnguage for XML Next Generation
•外语缩写:RELAX NG
简介
返回到最初的 XML 1.0 Recommendation,可扩展标记语言已经包括了验证或者说将其与预定义的结构比较的能力。第一个验证版本称为文档类型定义(外语缩写:DTD),但是许多开发人员认为它太简单了:它没有使用 XML 语法,也不能让开发人员指定现实世界中需要的许多规则。于是,W3C 开发了 XML Schema,但是许多开发人员认为它太复杂了:它使用了 XML 语法,也能够让用户建立公开的任何规则,但代价是增加了复杂性。其他人把 TREX 与 RELAX 的建议结合到了 RELAX NG 中,许多开发人员认为它正好合适。它使用了 XML 语法,也允许开发人员建立 W3C XML Schema 语言所能创建的多数相同规则,但是语法大大简化了。
RELAX NG [OASIS Committee Specification and ISO Standard ISO/IEC 19757-2:2003] [2] 是一种可用来定义和限制 XML 词汇表的语言。最初的 XML 模式语言是 XML 1.0 自己定 义的 DTD。但是,一些人不喜欢 DTD,因为它丑陋的语法、表达文本和标记结构的局限性,并且难以处理 XML Namespaces。出现了几种新的 XML 模式语言以替代或增强 DTD,其中包括 RELAX NG,它以简洁性和表达能力著称。RELAX NG 核心规范还为架构定义了一种 XML 语法,此外,RELAX NG Compact Syntax[OASIS 委员会规范和 ISO Standard ISO/IEC 19757-2:2003/Amd.1:2006] 还为 RELAX NG 架构定义了一种简单的文本语法。RELAX NG 的 ISO 版本现在可从 ISO 的 Freely Available Standards 页面免费获得。
当 XML 1.0 Recommendation 第一次发布的时候,它包括了 DTD 的定义,DTD 是 XML 的先辈 SGML 的验证格式。DTD 很有用,它允许开发人员建立 XML 文档必须遵循的层次结构。 不幸的是,DTD 存在两个严重的缺陷。首先,它们不是 XML 文档 ―― 比如,一个 DTD 可能是这个样子:
<!ELEMENT memories (memory+)>
<!ELEMENT memory (media, subdate, donor, subject, location)>
<!ATTLIST memory mediaid CDATA #REQUIRED status CDATA #REQUIRED>
<!ELEMENT subdate (#PCDATA)>
<!ELEMENT donor (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT location (description | place)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT place (#PCDATA)>
其次,在建立数据类型和其他约束方面的能力有限。 于是,不同的开发人员组织开始寻求新的、基于 XML 的方法,已建立 XML 文档必须符合的层次结构(或语法)。正式的标准是 W3C XML Schema 语言,但也受到一些不利之处的困扰,主要在于建立复杂的规则可能非常难。 但是 W3C 并没有关上创建模式语言的大门。开放源代码团体结合了两种不同的建议,TREX 和 RELAX,形成了 RELAX NG(读作 “relaxing”),一种基于 XML 的模式语言,提供了许多与 W3C 模式语言等同的功能,但是又简单得多。(RELAX NG 还提供了一种非 XML 的 紧凑 语法,我将在后面的 紧凑语法 部分讨论它。)
验证程序存在不同语言的版本,包括:
-
Java 技术 ―― Jing 和 MSV C 语言 ―― Libxml2 。
-
C# 语言 ―― Tenuto 。
-
Python 语言 ―― XVIF 。
-
ActiveX ―― 有一个 DLL,是VBRELAXNG。
特性
-
简单易学;
-
同时具有XML语法和紧凑的非XML语法;
-
不改变一个XML文档的信息集;
-
支持XML命名空间;
-
对待均匀属性的元素尽可能;
-
支持具有无序的内容不受限制;
-
支持具有混合内容无限制;
-
具有坚实的理论基础;
-
可以用一个单独的数据类型定义语言(例如XML Schema数据类型)。 [2]