【问题标题】:How to add XSD datatype restrictions to a DTD?如何将 XSD 数据类型限制添加到 DTD?
【发布时间】:2016-06-27 16:40:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: xml xsd dtd


    【解决方案1】:

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

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

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

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

      没有一种元素类型的可能性为规范提供数字类型或长度。

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

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

      TokenizedType 可以是IDIDREFIDREFSENTITYENTITIESNMTOKENNMTOKENS 之一; EnumeratedType 可以是符号或枚举。

      没有任何可能的属性类型为规范提供数字类型或长度。

    总的来说,元素或属性不支持数字类型。1改用 XSD。

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

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多