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