如何向 DTD 添加 XSD 数据类型限制?

How to add XSD datatype restrictions to a DTD?

我正在尝试制作一个 DTD,我想在其中添加一些限制,例如:

但我不知道该怎么做。 (我知道使用 XML 模式添加这些限制更容易,但我想使用 DTD 来完成)。

DTDs不能限制数据为数值类型,更不能限制位数:

  • 元素:DTD 将元素的 content spec 定义为

    [46]     contentspec ::=     'EMPTY' | 'ANY' | Mixed | children
    

    通过Mixed我们可以声明#PCDATA(解析后的字符数据)但是 没有进一步的数据类型规范。通过children我们可以 递归地声明子元素。

    None 的元素类型可能性为规范提供了数字类型或长度。

  • 属性:DTD 定义 attribute type作为字符串、一组标记化类型或枚举类型:

    [54]       AttType     ::=     StringType | TokenizedType | EnumeratedType
    

    TokenizedType 可以是 IDIDREFIDREFSENTITYENTITIESNMTOKEN 之一或 NMTOKENSEnumeratedType 可以是符号或枚举。

    None 的属性类型可能性为规范提供了数字类型或长度。

总体而言,元素或属性不支持数字类型。1请改用 XSD。

1 如果您处于特殊情况需要扩展 DTD 以表达更广泛的数据类型,例如 XSD,见 Datatypes for DTDs (DT4DTD) 1.0。但是,不要指望现有的验证解析器会强制执行此类规范,这些规范更多地是为了 为更平滑的未来过渡路径 到 XML 架构提供基础。