更新時(shí)間:2023-06-14 來源:黑馬程序員 瀏覽量:
在DTD文檔中,定義元素的同時(shí),還可以為元素定義屬性。DTD屬性定義的基本語法格式如下所示:
<!ATTLIST元素名 屬性名1屬性類型設(shè)置說明 屬性名2屬性類型設(shè)置說明 ... >
在上面屬性定義的語法格式中,“元素名”是屬性所屬元素的名字,“屬性名”是屬性的名稱,“屬性類型”則是用來指定該屬性是屬于哪種類型,“設(shè)置說明”用來說明該屬性是否必須出現(xiàn)。關(guān)于“屬性類型”和“設(shè)置說明”的相關(guān)講解,具體如下。
1.設(shè)置說明
定義元素的屬性時(shí),有4種設(shè)置說明可以選擇,具體如下。
(1) #REQUIRED
#REQUIRED表示元素的該屬性是必需的,例如,當(dāng)定義聯(lián)系人信息的DTD時(shí),我們希望每一個(gè)聯(lián)系人都有一個(gè)聯(lián)系電話屬性,這時(shí),可以在屬性聲明時(shí),使用REQUIRED.
(2) #Ahp IMPLIED
#IMPLIED表示元素可以包含該屬性,也可以不包含該屬性。例如,當(dāng)定義一本書的信息時(shí),發(fā)現(xiàn)書的頁數(shù)屬性對(duì)讀者無關(guān)緊要,這時(shí),在屬性聲明時(shí),可以使用IMPLIED。
(3) #FIXED
#FIXED表示一個(gè)固定的屬性默認(rèn)值,在XML.文檔中不能將該屬性設(shè)置為其他值。使用#FIXED關(guān)鍵字時(shí),還需要為該屬性提供一個(gè)默認(rèn)值。當(dāng)XML文檔中沒有定義該屬性時(shí),其值將被自動(dòng)設(shè)置為DTD中定義的默認(rèn)值。
(4)默認(rèn)值
和FIXED一樣,如果元素不包含該屬性,該屬性將被自動(dòng)設(shè)置為DTD中定義的默認(rèn)值。不同的是,該屬性的值是可以改變的,如果XML文件中設(shè)置了該屬性,新的屬性值會(huì)覆蓋 DTD中定義的默認(rèn)值。
2.屬性類型
在DTD中定義元素的屬性時(shí),有10種屬性類型可以選擇,具體如下。
(1) CDATA
這是最常用的一種屬性類型,表明屬性類型是字符數(shù)據(jù),與元素內(nèi)容說明中的#PCDATA相同。當(dāng)然,在屬性設(shè)置值中出現(xiàn)的特殊字符,也需要使用其轉(zhuǎn)義字符序列來表示,例如,用&表示字符(&),用&.lt;表示字符(<)等。
(2) Enumerated
在聲明屬性時(shí),可以限制屬性的取值只能從一個(gè)列表中選擇,這類屬性屬于Enumerated(枚舉類型)。需要注意的是,在DTD定義中并不會(huì)出現(xiàn)關(guān)鍵字Enumerated。接下來通過一個(gè)案例來學(xué)習(xí)如何定義Enumerated類型的屬性,如下所示。
<? xml version="1.0" encoding="GB2312" standalone?"yes"?> <!DOCTYPE 購物籃 [ <!ELEMENT 購物籃 ANY> <!ELEMENT 肉 EMPTY> <!ATTLIST 肉 品種(雞肉|牛肉|豬肉|魚肉)"雞肉"> ]> <購物籃> <肉 品種=“魚肉”/> <肉 品種=“牛肉”/> <肉/> </購物籃>
“品種”屬性的類型是Enumerated,其值只能為“雞肉”、“牛肉”、“豬肉”和“魚肉”,而不能使用其他值。“品種”屬性的默認(rèn)值是“雞肉”,所以,即使<購物籃>元素中的第三個(gè)子元素沒有顯式定義“品種”這個(gè)屬性,但它實(shí)際上也具有“品種”這個(gè)屬性,且屬性的取值為“雞肉”。
(3) ID
一個(gè)ID類型的屬性用于唯一標(biāo)識(shí)XML文檔中的一個(gè)元素。其屬性值必須遵守XML.名稱定義的規(guī)則。一個(gè)元素只能有一個(gè)ID類型的屬性,而且ID類型的屬性必須設(shè)置為#IMPLIED或#REQUIRED。因?yàn)镮D類型屬性的每一個(gè)取值都是用來標(biāo)識(shí)一個(gè)特定的元素,所以,為ID類型的屬性提供默認(rèn)值,特別是固定的默認(rèn)值是毫無意義的。接下來通過一個(gè)案例來學(xué)習(xí)如何定義一個(gè)ID類型的屬性,如下所示。
<?xml version="1.0" encoding="GB2312" standalone="yes" ?> <!DOCTYPE 聯(lián)系人列表 [ <!ELEMENT 聯(lián)系人列表 ANY> <!ELEMENT 聯(lián)系人(姓名,EMAIL)> <ELEMENT 姓名(#PCDATA)> < !ELEMENT EMAIL(#PCDATA)> <!ATTLIST聯(lián)系人編號(hào)ID #REQUIRED> ]> <聯(lián)系人列表> <聯(lián)系人編號(hào)="idl"> <姓名>張三</姓名> <EMAIL> zhang@itcast.cn</EMAIL> </聯(lián)系人> <聯(lián)系人 編號(hào)="id2"> <姓名>李四</姓名> <EMAIL>1ieitcast.cn</EMAIL> </聯(lián)系人> </聯(lián)系人列表>
將元素為<聯(lián)系人>的編號(hào)屬性設(shè)置為#REQUIRED,說明每個(gè)聯(lián)系人都有一個(gè)編號(hào),同時(shí),屬性編號(hào)的類型為ID,說明編號(hào)是唯一的。如此一來,通過編號(hào)就可以找到唯一對(duì)應(yīng)的聯(lián)系人了。