首頁技術(shù)文章正文

怎樣為DTD文檔中的元素定義屬性?

更新時(shí)間:2023-06-14 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

在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)系人了。


分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!