下面是这个宣告的不同之处:

你可以为Class 属性指派任何合法的引号包围字符串(CDATA 关键词);如果你将属性从特定元素中省略,它将自动指派默认值「fictional」给处理器。你可以为Year 属性指定任何合法的引号包围字符串;然而,该属性必须在每一个HTML 元素(#REQUIRED 关键词)中被指定一个值,因此它并没有默认值。
下面这个有效的XML 文件包含了这个属性列表以及FILM 元素:
[
##REQUIRED>
]
>
Morgan Attenbury
在FILM 元素中,Year 属性的指定值为「1948」。 Class 属性被省略;然而,因为这个属性拥有默认值(「fictional」),它会被指派默认值,如同你包含该属性并为它输入该值。
注意
如果你为一个元素型态包含了多个属性列表宣告,两个宣告的内容会被合并。如果一个拥有给定名称的属性为同一个元素被宣告一次以上,第一个宣告将被使用而第二个会被忽略。(当文件拥有内部与外部的DTD 子集时,多个属性列表宣告是很普遍的,本章稍后将会介绍。)
属性的型态
属性列表是属性定义中第二个必要的组件。它指定了何种值你可以设定到文件的属性中。

你可以利用下面三种方式来指定属性的型态:
字符串型态 。字符串型态属性可以被指定任成何引号包围的字符串(也称为literal(字义)),这种引号包围的字符串必须符合第三章中 <合法属性值的规则> 章节中所介绍的规则。你会使用关键词CDATA 来宣告一个字符串型态属性,如同下面范例中的Class 的属性定义:
Tokenized 型态 。你可以指定到Tokenized 型态属性的值必须受到数种限制,将在下一节中介绍。
列举型态 。你可以为列举型态属性选择列表中的一个值。本章稍后将讨论这种型态。
设定Tokenized 型态
就像任何的属性值一样,你为Tokenized 型态指定的值必须是一个符合第三章中 <合法属性值的规则> 章节中所介绍的规则的引号包围字符串。
另外,该值必须符合你在属性定义中借着适当关键词所指定的特殊限制。例如,在下面的XML文件中,StockCode 属性借着使用ID 关键词被定义成tokenized 型态。(ID 是唯一你可以用来宣告tokenized 型态的关键词)这个关键词代表对于每一个元素、属性都必须被指定一个唯一的值。(例如,将股票号码「S021」设定到两个ITEM 元素中将会造成违法。)
[
]
>
- Peach Tea Pot
- Electric Coffee Grinder
- Candy Thermometer
下面是你可以用来定义tokenized 型态属性的关键词,以及加诸在属性值上限制的完整列表:
ID 在每一个元素中属性都必须拥有一个唯一值。该值必须以字母或底线(_)开始,后面接着零或多个字母、数字、句点(.)、连字号(-),或底线(_)。它也可以包含单一个冒号(:),除了不能放在第一个字符位置外。特殊的元素属性只能拥有一个ID 型态属性,而且属性的预设宣告必须是#REQUIRED 或#IMPLIED(本章稍后将会介绍)。你可以在上面给定的INVENTORY 文件中看到这种型态属性的范例。
IDREF 属性值必须与文件中元素内的某些ID 型态属性的值相符合。换言之,这种型态的属性会参考另一个属性的唯一识别代号。例如,你可以加入一个名为GoesWith 的IDREF 属性到ITEM 元素中:
接着你可以使用这个属性来参考另一个ITEM 元素,如下所示:
- Electric Coffee Grinder
Coffee Grinder Brush
IDREFS 这种属性就像IDREF 型态,除了它的值可以参考数个识别代号-以空格符分隔-全部包含在引号字符串内。例如,如果你像这样为GoesWith 属性指定IDREFS 型态: