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

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

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

IT培訓班

在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。接下來通過一個案例來學習如何定義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類型的屬性提供默認值,特別是固定的默認值是毫無意義的。接下來通過一個案例來學習如何定義一個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)系人了。


分享到:
在線咨詢 我要報名
和我們在線交談!