【发布时间】:2016-06-27 16:40:28
【问题描述】:
我正在尝试制作一个 DTD,我想在其中添加一些限制,例如:
- 只允许引入 9 个号码的电话号码
- 只允许引入包含 7 个数字和 1 个字母的 ID
但我不知道该怎么做。 (我知道用 XML Schema 添加这些限制更容易,但我想用 DTD 来做)。
【问题讨论】:
我正在尝试制作一个 DTD,我想在其中添加一些限制,例如:
但我不知道该怎么做。 (我知道用 XML Schema 添加这些限制更容易,但我想用 DTD 来做)。
【问题讨论】:
DTD 不能将数据限制为数字类型,更不用说限制位数了:
元素:DTD 将元素的content spec 定义为
[46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children
通过Mixed,我们可以声明#PCDATA(解析的字符数据)但是
不做进一步的数据类型规范。通过children我们可以
递归地声明子元素。
没有一种元素类型的可能性为规范提供数字类型或长度。
属性:DTD 将 attribute type 定义为字符串、一组标记化类型或枚举类型:
[54] AttType ::= StringType | TokenizedType | EnumeratedType
TokenizedType 可以是ID、IDREF、IDREFS、ENTITY、ENTITIES、NMTOKEN 或 NMTOKENS 之一; EnumeratedType 可以是符号或枚举。
没有任何可能的属性类型为规范提供数字类型或长度。
总的来说,元素或属性不支持数字类型。1改用 XSD。
1如果您处于需要扩展 DTD 以表达更广泛的数据类型(例如 XSD 中的数据类型)的特殊情况,请参阅Datatypes for DTDs (DT4DTD) 1.0。但是,不要指望现有的验证解析器会强制执行此类规范,这些规范更多是为了为更顺畅的未来过渡路径提供基础到 XML Schema。
【讨论】: