一些XML元素具有屬性。屬性包含應用程序使用的信息。屬性僅在程序對元素進行讀、寫操作時,提供元素的額外信息(如ID號等),對於人類讀、寫元素來說是毫無意義的。在本章中學習各種屬性類型和如何在DTD中聲明屬性。
本章內容如下:
* 什麼是屬性?
* 如何在DTD中聲明屬性
* 如何聲明多個屬性
* 如何指定屬性的缺省值
* 屬性類型
* 預定義屬性
* 基於屬性的棒球比賽統計數據的DTD
10.1 什麼是屬性?
在第3章曾經討論過開始標記和空標記可包含由等號"="分割開的成對的屬性名和屬性值。例如:
<GREETING LANGUAGE= "English">
Hello XML!
<MOVIE SOURCE= "WavingHand.mov" />
</GREETING>
上述例子中,GREETING元素具有LANGUAGE屬性,其屬性值為ENGLISH。MOVIE元素具有SOURCE屬性,其屬性值為WavingHand.mov。GREETING元素內容為Hello XML!。書寫內容的語言對內容本身來說是一個有用的信息,可是語言不是內容的一部分。
與此相似,MOVIE元素內容為保存在WavingHand.mov文件中的二進制數據。盡管文件名告訴我們到何處可找到元素內容,但它本身不是元素內容。再次強調,屬性包含有關元素內容信息,而不是元素內容本身。
元素可具有多個屬性,例如:
<RECTANGLE WIDTH= "30" HEIGHT= "45" />
<SCRIPT LANGUAGE= "javascript" ENCODING= "8859_1" >...</SCRIPT>
上例中,SCRIPT元素屬性LANGUAGE的值為javascript,SCRIPT元素屬性ENCODING的值為8859_1;RECTANGLE元素屬性WIDTH的值為30;RECT元素屬性HEIGHT的值為45。這些屬性值均為字符串數據,不是數字型數據。
結束標記不能帶屬性,下例視為非法:
<SCRIPT>...</SCRIPT LANGUAGE= "javascript" ENCODING= "8859_1" >
10.2 在DTD中聲明屬性
與元素和實體相似,為保持文檔的合法性,需要在文檔的DTD中聲明屬性。<!ATTLIST>標記用於聲明屬性,其形式如下:
<!ATTLIST Element_name Attribute_name Type Default_value>
Element_name為擁有該屬性的元素名。Attribute_name為屬性名,Type為表10-1列出的10種有效屬性類型的一種。最常用的屬性類型為CDATA。最後,若未規定屬性值,則屬性值為Default_value。
例如,研究下列元素:
<GREETING LANGUAGE= "Spanish">
Hola!
</GREETING>
在DTD中,可按如下格式聲明該元素:
<!ELEMENT GREETING (#PCDATA)>
<!ATTLIST GREETING LANGUAGE CDATA "English">
<!ELEMENT>標記簡單地說明greeting元素包含可析字符數據,這裡沒什麼新內容。<!ATTLIST>標記表明GREETING元素擁有LANGUAGE屬性,其值為CDATA類型,本質上與元素內容的#PCDATA相同。若所看見的GREETING標記中沒有LANGUAGE屬性,則LANGUAGE屬性值為缺省