📜  DTD-属性(1)

📅  最后修改于: 2023-12-03 15:00:33.223000             🧑  作者: Mango

DTD-属性

DTD属性是定义在DTD中的特殊属性,它描述了XML文档中出现的元素的一些属性。DTD中的属性定义可以提供关于元素值约束的信息,以及关于元素和实体公共属性和值的信息。在XML Schema和Relax NG等新一代XML技术中,属性更为灵活和丰富。在本文中,我们将介绍DTD中属性的相关概念和用法。

属性的定义

DTD中使用attribute声明来定义元素的属性,其基本语法如下:

<!ATTLIST element-name attribute-name attribute-type default-value>
  • element-name:元素名,表示正在定义其属性;
  • attribute-name:属性名,表示元素具有的一个属性;
  • attribute-type:属性类型,表示属性可以取得的值类型;
  • default-value:缺省值,表示如果属性没有指定值,则使用此默认值。
属性类型

DTD中定义的属性类型有以下几种:

  • CDATA:表示字符串类型,可以包含任意字符序列,包括空白字符;
  • ID:表示属性的值是唯一的,且该值是一个标识符,即字母或下划线开头的字符序列;
  • IDREF:表示属性的值是指向文档中某个元素的ID值;
  • IDREFS:与IDREF类似,但可以包含多个ID值;
  • ENTITY:表示属性的值是实体的名称;
  • ENTITIES:与ENTITY类似,但可以包含多个实体名称;
  • NMTOKEN:表示不带空格的字符串类型,只能包含字母、数字和特殊字符;
  • NMTOKENS:与NMTOKEN类似,但可以包含多个NMTOKEN值;
  • ENUMERATION:表示枚举类型,其值必须是特定的一组字符串类型。
示例

下面是一个简单的DTD示例,它定义了一个名为“person”的元素,并声明了其三个属性name、age和sex:

<!DOCTYPE people[
<!ELEMENT person (#PCDATA)>
<!ATTLIST person name CDATA #REQUIRED>
<!ATTLIST person age CDATA #REQUIRED>
<!ATTLIST person sex (male|female) "female">
]>

在上述示例中,我们定义了一个“person”元素,其属性包括name(必须值)、age(必须值)和sex(默认值为“female”)。属性name和age的类型均为CDATA,即字符串类型,属性sex的类型为枚举类型,其值必须是“male”或“female”。

总结

DTD属性是XML文档中重要的组成部分,它为元素提供了丰富的信息和属性值的约束。在DTD中定义属性时需要注意属性类型和缺省值的设置,以保证XML文档的正确性和合法性。除DTD外,XML Schema和Relax NG等技术也提供了更为灵活和强大的属性定义方式,可以更好地满足XML数据定义和校验的需求。