XML

XML 知识量:7 - 28 - 99

3.3 DTD属性声明><

属性声明的语法- 3.3.1 -

属性用于描述元素的额外信息,属性声明的内容包括:属性的名称、所属的元素、属性的类型、属性的默认值、是否必须等。

1、当元素拥有1个属性时,声明的语法为:

<!ATTLIST 元素名称 属性名称 属性类型 [关键字] [默认值]>

其中:

  • <!表示属性声明的开始,ATTLIST是关键字,且必须大写,<!与ATTLIST之间不能有空格。

  • 元素名称为包含该属性的元素的名称。

  • 属性名称为要定义的属性的名称。

  • 属性类型为属性值的类型。

  • 关键字用于设定默认值的关键字,属于可选项。

  • 默认值为属性的默认值,必须包含在一对双引号或单引号中,属于可选性。

下面是一个示例:

<!ATTLIST student age CDATA #REQUIRED "10">

2、当元素拥有多个属性时,声明的语法为:

<!ATTLIST 元素名称 属性名称1 属性1类型 [关键字] [默认值]
属性名称2 属性2类型 [关键字] [默认值]
......
属性名称n 属性n类型 [关键字] [默认值]>

属性声明的关键字- 3.3.2 -

声明属性时,关键字用于控制元素是否必须拥有该属性、未赋值时是否使用默认值,以及属性的默认值是否可以修改等。具体情况如下:

  • #IMPLIED:表示属性是可选的,即在XML文档中,某元素的该属性可有可无。

  • #REQUIRED:表示属性是必需的,即在XML文档中,必须为元素定义该属性。

  • #FIXED:表示属性的取值是固定不变的。此时,必须指定属性的默认值。在XML文档中,如果没有为元素定义该属性,XML解析器会自动给该属性赋予默认值;如果为元素定义了该属性,属性的取值也只能是默认值,不能更改。

  • 没有关键字,直接指定默认值。此时,XML文档中,如果没有定义该属性,XML解析器会自动赋予该属性默认值;如果定义了该属性,其取值可以是默认值,也可以指定新值。

属性类型- 3.3.3 -

属性的数据类型主要有以下10种:

属性类型含义
CDATA字符数据,没有标记的文本
Enumerated枚举类型
ID具有唯一性的属性类型
IDREFID引用类型
IDREFS若干个以空格分隔的IDREF
ENTITY实体类型
ENTITIES若干个以空格分隔的实体类型
NMTOKENXML名称记号
NMTOKENS若干个以空格分隔的XML名称记号
NOTATION在DTD中声明的标记的名称

1、CDATA类型。属于纯文本字符,可以是任意长度的字符串,但不能直接包含“<”,“>”,“&”,“"”,“'”这5个字符,如果要使用,需要使用预定义实体进行转换。示例:

<!ATTLIST student age CDATA #REQUIRED>

2、Enumerated类型。枚举类型是指一组可接受的取值列表。“Enumerated”并不是关键字,要声明某属性为枚举类型,就需要在数据类型的位置上用圆括号将所有可能的属性值列举出来,属性值之间用“|”隔开。示例:

<!ATTLIST student sex (male|female) #REQUIRED>

3、ID类型。其属性值在文档中必须是唯一的,声明时不能为指定默认值,也不能用“#FIXED”设定关键字。在XML文档中,属性值必须是有效的XML名称,即必须以字母或下划线开头,但不能以数字开头。示例:

<!ATTLIST student student_id ID #REQUIRED>

4、IDREF类型。属性的取值必须是XML文档中存在的ID类型的属性的值。例如以下示例中,属性班长ID(monitor_id)的值来源于属性学生ID(student_id)的值:

<!ATTLIST student student_id ID #REQUIRED>
<!ATTLIST student monitor_id IDREF>

5、IDREFS类型。相当于IDREF类型的复数,即属性值由一个或多个IDREF类型的值组成,是由空格分开的IDREF类型的列表。

6、ENTITY类型。表示一个解析内容的引用,可以用于将外部二进制数据(即外部未解析的普通实体)链接到文档中。例如以下示例中,声明了属性source是ENTITY类型:

<!ENTITY src SYSTEM "flower.jpg">
<!ATTLIST IMAGE source ENTITY #REQUIRED>

在XML文档中可以插入图片:

<IMAGE source="src"></IMAGE>

7、ENTITIES类型。相当于ENTITY类型的复数,即属性值由一个或多个ENTITY类型的值组成,是由空格分开的ENTITY类型的列表。

8、NMTOKEN类型。属性值只能是由英文字母、数字、下划线(_)、连字符(-)、句点(.)、冒号(:)等字符所构成的字符串,且字符串内不能有空格。

9、NMTOKENS类型。相当于NMTOKEN类型的复数,即属性值由一个或多个NMTOKEN类型的值组成,是由空格分开的NMTOKEN类型的列表。

10、NOTATION类型。允许属性值为一个DTD中声明的符号。现实中存在很多无法用XML格式表示的数据,例如图像、声音等,对于这类数据,XML通常不会直接处理,而是通过设定NOTATION类型的属性,指定一个外部程序来处理。

在DTD中定义这个符号有两种方式,一种是使用MIME类型,语法为:

<!NOTATION 符号名 SYSTEM "MIME类型">

另一种是使用URL路径来指定一个处理程序,语法为:

<!NOTATION 符号名 SYSTEM "URL路径">