在属性的声明中TYPE 部分为属性的类型设定,DTD 中属性的类型有10 种,下面将
对这些数据类型进行逐一的介绍。
1. CDATA 型
CDATA 型表明属性值为不包含“< ”和“"”的任意字符串,如果属性值中需要包含
“<”和“"”,则可使用特殊字符来代替。
2. Enumerated 型
如果属性值并不是任意的字符串,而是在几个可能的值中进行选择,如书籍的“类别”
属性,其值可为“文艺”,也可为“自然科学”,而不可能为其他情况时,则可以将书籍
的“类别”属性设定为Enumerated 型。
3. ID 型
当元素的某个属性值是不能重复时,如书籍的ISBN 属性、个人的“身份证号”属性
等,要定义这样的属性则需使用属性的ID 类型。在一个XML 文档中,所有元素的ID
类型属性的属性值必须是唯一的,不可重复,另外,一个元素不能有超过一个ID 类型的
属性。
4. IDREF 与IDREFS 型
IDREF 为Identifier Reference 的缩写,IDREF 与ID 类型属性的关系为子元素与父元素
的关系,即IDREF 类型属性的值必须是其他元素的ID 类型属性的值,且该ID 类型属性的
值必须在文档的其他地方被设定过。IDREFS 类型属性的属性值可有多个,每一个都必须
是在文档其他地方被设定了的ID 类型属性的值,而这多个属性值之间用空格隔开。
例 IDREFS 的使用,代码如源程序code4_10.xml 所示。
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE school [
<!ELEMENT school (teacher, subject*)>
<!ELEMENT teacher (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ATTLIST teacher
teach IDREFS #IMPLIED
>
<!ATTLIST subject
number ID #REQUIRED
>
]>
<school>
<teacher teach="c 0001 c 0002 c 0003">
丁潇
</teacher>
<subject number="c0001">
PowerBuilder
</subject>
<subject number="c0002">
AutoCAD
</subject>
<subject number="c0003">
XML
</subject>
</school>
5. ENTITY 与ENTITIES 型
ENTITY 类型的属性提供了把外部二进制形式的文件(如.jpeg、.mp3 等)和外部不可解
析实体链接到XML文档的功能。因此其属性值也必须为不可解析的链接外部实际数据的
通用实体名。ENTITIES 类型属性的属性值可由多个不可解析的外部实体名称组成,各实体
名称之间使用空格隔开。
例 ENTITY 与ENTITIES 的使用,代码如源程序code4_11.xml 所示。
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE customers [
<!ELEMENT customers (customer*)>
<!ELEMENT customer (username, password, picture)>
<!ELEMENT username (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT picture EMPTY>
<!ATTLIST picture pic ENTITIES #REQUIRED
>
<!ATTLIST customer
ID #REQUIRED
>
<!ENTITY pic1 SYSTEM "a.jpg">
<!ENTITY pic2 SYSTEM "b.jpg">
<!ENTITY pic3 SYSTEM "c.jpg">
<!ENTITY pic4 SYSTEM "d.jpg">
]>
<customers>
<customer ID="c0500103">
<username>cheaperget</username>
<password>12345678</password>
<picture pic="pic1 pic2"/>
</customer>
<customer ID="c0500208">
<username>dreamingboy</username>
<password>22345678</password>
<picture pic="pic3 pic4"/>
</customer>
</customers>
本例不是所有浏览器都可以自动识别的通用格式,仅仅某些浏览器和应用程序
可能采用的在文档中嵌入非XML 数据的方法而已。
6. NMTOKEN 与NMTOKENS 型
NMTOKEN 类型的属性限定属性值是有效的XML 名称,这个属性值可以由英文、数
字、“.”、 “_ ”、“-”、“:”等组成,这里有几点需要注意。
(1) 不能包括空格。
(2) 以上字符中除“:”以外,其他字符都可以作为开头字符。
(3) “:”可以出现在中间,但由于它是命名域的关键字符,所以一般不提倡使用。
正因为NMTOKEN 类型的属性对于字符的严格要求,使得它在一些常用编程语言中,
都是合法的数据,这就为这些编程语言对XML 文档数据的操作打下了良好的基础。
NMTOKENS 类型的属性具有与NMTOKEN 属性相近的形式。这种类型的属性可以使如
下情况合法——属性由若干XML 名称组成,彼此间由空格隔开。通常可为使用NMTOKEN
属性相同的理由而使用NMTOKENS 属性,但仅仅在需要多个名字的时候。
7. NOTATION 型
XML 文档中引入了外部不可解析的实体后,解析器无法解析这些二进制文件,这时,
就可以使用NOTATION类型的属性为这些二进制文件指定与其对应的应用软件以对其进
行处理。
例 NOTATION 的使用,代码如下
<?xml version="1.0" encoding="gb2312" ?>
<!DOCTYPE customers [
<!ELEMENT customers (customer*)>
<!ELEMENT customer (username,password,picture)>
<!ELEMENT username (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!NOTATION mspaint SYSTEM "C:/WINDOWS/system32/mspaint.exe">
<!ELEMENT picture EMPTY>
<!ATTLIST picture pic ENTITIES #REQUIRED>
<!ATTLIST picture procedure NOTATION #REQUIRED>
<!ATTLIST customer ID ID #REQUIRED>
<!ENTITY pic1 SYSTEM "a.jpg">
<!ENTITY pic2 SYSTEM "b.jpg">
<!ENTITY pic3 SYSTEM "c.jpg">
<!ENTITY pic4 SYSTEM "d.jpg">
]>
<customers>
<customer ID="c0500103" >
<username>cheaperget</username>
<password>12345678</password>
<picture pic="pic1 pic2" procedure="mspaint"/>
</customer>
<customer ID="c0500208" >
<username>dreamingboy</username>
<password>22345678</password>
<picture pic="pic3 pic4" procedure="mspaint"/>
</customer>
</customers>