如何向 DTD 添加 XSD 数据类型限制?
How to add XSD datatype restrictions to a DTD?
我正在尝试制作一个 DTD,我想在其中添加一些限制,例如:
- 只允许引入9个号码的电话号码
- 只允许引入7个数字和1个字母的ID
但我不知道该怎么做。 (我知道使用 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
可以是 ID
、IDREF
、IDREFS
、ENTITY
、ENTITIES
、NMTOKEN
之一或 NMTOKENS
; EnumeratedType
可以是符号或枚举。
None 的属性类型可能性为规范提供了数字类型或长度。
总体而言,元素或属性不支持数字类型。1请改用 XSD。
1 如果您处于特殊情况需要扩展 DTD 以表达更广泛的数据类型,例如 XSD,见 Datatypes for DTDs (DT4DTD) 1.0。但是,不要指望现有的验证解析器会强制执行此类规范,这些规范更多地是为了 为更平滑的未来过渡路径 到 XML 架构提供基础。
我正在尝试制作一个 DTD,我想在其中添加一些限制,例如:
- 只允许引入9个号码的电话号码
- 只允许引入7个数字和1个字母的ID
但我不知道该怎么做。 (我知道使用 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
可以是ID
、IDREF
、IDREFS
、ENTITY
、ENTITIES
、NMTOKEN
之一或NMTOKENS
;EnumeratedType
可以是符号或枚举。None 的属性类型可能性为规范提供了数字类型或长度。
总体而言,元素或属性不支持数字类型。1请改用 XSD。
1 如果您处于特殊情况需要扩展 DTD 以表达更广泛的数据类型,例如 XSD,见 Datatypes for DTDs (DT4DTD) 1.0。但是,不要指望现有的验证解析器会强制执行此类规范,这些规范更多地是为了 为更平滑的未来过渡路径 到 XML 架构提供基础。