DTD 属性
DTD - 属性声明
Section titled “DTD - 属性声明”在文档类型定义(DTD)中,元素的属性使用 <!ATTLIST> 声明来定义。
这个声明指定了属性所属的元素、属性名称、属性类型以及其默认值或要求。
注意: 在 DTD 中定义属性不如使用 XML Schema (XSD) 灵活,因为 XSD 提供了更丰富的数据类型和命名空间支持。在现代 XML 开发中,通常首选使用 XSD。
属性声明的基本语法是:
<!ATTLIST element-name attribute-name attribute-type attribute-default>示例:
DTD declaration:<!ATTLIST payment type CDATA "cash">
Corresponding XML element usage:<payment type="check" /><!-- 'type' attribute provided -->
<payment /><!-- 'type' attribute omitted, defaults to "cash" -->DTD 中的属性类型
Section titled “DTD 中的属性类型”attribute-type 指定了属性可以持有的值类型。常见的类型包括:
| 类型 | 描述 |
|---|---|
| CDATA | 字符数据(一个文本字符串) |
| (val1|val2|..) | 枚举类型:值必须是指定列表中的一个 |
| ID | XML 文档中的一个唯一标识符(必须遵循 XML 名称规则) |
| IDREF | 引用另一个元素上声明的 ID |
| IDREFS | 一个由空格分隔的 IDREF 列表 |
| NMTOKEN | 一个有效的 XML 名称标记(类似于名称,但允许更多字符) |
| NMTOKENS | 一个由空格分隔的 NMTOKEN 列表 |
| ENTITY | 一个未解析的外部实体的名称 |
| ENTITIES | 一个由空格分隔的 ENTITY 名称列表 |
| NOTATION | 在 DTD 中声明的符号(Notation)名称 |
请注意,DTD 缺乏特定的数字、日期或布尔类型,与 XSD 相比这是一个主要的限制。
属性默认值和要求
Section titled “属性默认值和要求”attribute-default 指定了属性是否必需以及如果省略时其值是什么:
| 默认值关键字 | 解释 |
|---|---|
| ”defaultValue” | 指定如果属性在 XML 标签中不存在时的默认值。 |
| #REQUIRED | 属性必须明确包含在 XML 标签中。 |
| #IMPLIED | 属性是可选的。如果省略,处理 XML 的应用程序决定如何处理它的缺失(解析器不提供默认值)。 |
| #FIXED “fixedValue” | 属性必须要么被省略(在这种情况下它取 fixedValue),要么包含且值正好是指定的 fixedValue。任何其他值都会导致验证错误。 |
属性默认值的示例
Section titled “属性默认值的示例”1. 默认值:
Section titled “1. 默认值:”DTD:<!ELEMENT square EMPTY><!ATTLIST square width CDATA "0">
Valid XML:<square width="100" /><square /> <!-- width defaults to "0" -->2. 必需属性:
Section titled “2. 必需属性:”DTD:<!ELEMENT person EMPTY><!ATTLIST person number ID #REQUIRED>
Valid XML:<person number="p5677" />
Invalid XML:<person /> <!-- missing required 'number' attribute -->3. 可选属性(Implied):
Section titled “3. 可选属性(Implied):”DTD:<!ELEMENT contact EMPTY><!ATTLIST contact fax CDATA #IMPLIED>
Valid XML:<contact fax="555-667788" /><contact /> <!-- 'fax' is optional -->4. 固定属性:
Section titled “4. 固定属性:”DTD:<!ELEMENT sender EMPTY><!ATTLIST sender company CDATA #FIXED "MyCorp">
Valid XML:<sender company="MyCorp" /><sender /> <!-- company implicitly has value "MyCorp" -->
Invalid XML:<sender company="OtherCorp" /> <!-- value must be "MyCorp" -->5. 枚举属性值:
Section titled “5. 枚举属性值:”DTD:<!ELEMENT payment EMPTY><!ATTLIST payment type (cash | check | card) #REQUIRED>
Valid XML:<payment type="check" /><payment type="cash" />
Invalid XML:<payment type="invoice" /> <!-- 'invoice' is not in the allowed list --><payment /> <!-- 'type' is required -->枚举类型将属性值限制为预定义选项中的一个。