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

时间:2016-03-12 11:33:03

标签: xml xsd dtd

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

  • 仅允许引入包含9个号码的电话号码
  • 仅允许引入包含7个数字和1个字母的ID

但我不知道如何做到这一点。 (我知道使用XML Schema添加这些限制更容易,但我想用DTD来实现它。)

1 个答案:

答案 0 :(得分:2)

DTD无法将数据限制为数字类型 ,更不用说限制位数了:

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

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

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

    没有任何元素类型可能为规范提供数字类型或长度。

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

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

    TokenizedType可以是IDIDREFIDREFSENTITYENTITIESNMTOKEN或{中的一个} {1}}; NMTOKENS可以是符号或枚举。

    所有属性类型都不能为规范提供数字类型或长度。

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

1 如果您处于需要扩展DTD以表达更广泛数据类型(例如XSD中的数据类型)的特殊情况,请参阅Datatypes for DTDs (DT4DTD) 1.0。但是,不要指望现有的验证解析器强制执行此类规范,这些规范更多地为提供更顺畅的未来转换路径到XML Schema的基础。