XML 的屬性
大家應該都知道在 HTML 之中,幾乎所以有的標籤都有相關的屬性。例如:<img
src="my.gif" height="20" width="20"> 這個例子。在 IMG 這個標籤之中
,HEIGHT 和 WEIGHT 就是圖片標籤的屬性。在XML 之中,所有的標籤,我們也可
以為它設一個屬性。或是更多的屬性!而使用這些屬性也幾乎和在 HTML 裡一樣
簡單。
順道一提的是,現在在網路上已經有為我們設計的 XML 文件做檢查的軟體,如果
我沒記錯 IBM 也出了一套專門檢查和建立 XML文件的軟體。各位有機會可以下載
來玩玩看。
簡略介紹屬性
回想一下在我之前的文章中有一些標籤其實是可以為他們加上屬性的:
<ITEM quantity="1" units="PC">5600</ITEM>
這是啥意思呢?在之前的文章中有一個標籤是我設計來列出硬體的規格的,也就
是 <ITEM> 這個標籤。在這個標籤中相關的硬體的規格將會被一一列出,當然包
括售價。但如果我們能將售價的單位直接定義在標籤中那文章將會比較具有整體
性。甚至我們還可以標籤中設定不同的幣值,和衡量的單位。那為什麼我們不直
接將這些屬性做成標籤,以方便我們更靈活的運用呢?當然如果將以上的屬性設
定成標籤,也是可以的,但以我的例子來說,<ITEM> 這個標籤的內容將是不規則
的。有一些可以有屬性,有一些卻不需要任何屬性。所以如果我將屬性設為標籤
再加到我的文章中,將會造成 XML 文件的 NOT WELL-FORMED。也就是我將會犯了
XML 的基本要求中的“不可以混著用”的缺點。所以在設計時務必要相當小心,
不要做了一個錯了另一個。
現在我們有了基本的想法,就是 ITEM 這個標籤必須有屬性,那為了要使瀏覽器
能了解我們設定的屬性,我們必須將它加到我們的 DTD 之中:
<!ELEMENT ITEM#PCDATA>
<!ATTLIST ITEM quantity CDATA #REQUIRED>
<!ATTLIST ITEM units CDATA #FIXED>
第一行我們在前面的文章中有提過,所以這兒就略過不談。第二行我相信各位也
看得懂。quantity 是代表屬性的名稱。CDATA 和之前的 PCDATA 一樣代表文字的
意思。最後一個是設定屬性的原始值。當然也可以不設定,我這兒的例子是為了
要解釋才放上去的。如果在 XML 的文件中的標籤有指定值得話,原始值將不生效
。另外在設定原始值時只要直接寫上你想要出現的值就行了,這兒的 #REQUIRED
是表示,屬性的值是不可省略的。當然還有 #FIXED,這是代表,值是不可改變的
。#IMPLIED 是說值可以出現也可以不出現,以我的例子來說,值必須是
#IMPLIED。
結語
各位應該注意到我刻意將 PCDATA 和 CDATA 略過。其實這很重要。這在 XML 之
中是稱為 ID。就像我們的身份証號碼一樣,如果各位學過資料庫的話,那應該就
能理解了。簡單的來說,在資料庫中任何一種輸入將要被限定是哪一種資料型態
,各位不能在數字的資料型態中輸入文字,那是不會被資料庫接受的。﹝再說簡
單一些,如果有一個欄位要求你輸入日期,你輸入名字的話,那程式就會回報說
你的輸入是不正確的,這樣懂了吧?﹞所以,在 XML 之中也有相同的問題。因為
你是自己定義屬性和標籤,所以你必須準確的告訴程式說這個東東是代表啥東東
。一個代表日期的標籤是不能設定成文字型態的。也因為有這些問題所以我並不
打算將這些東東說出來,一方面是我並不是很熟,一方面是這實在太複雜了。共
有三種定義方式和許多的規則,所以等我學會了在和各位分享。
在 XML 中也有一些相當好用的東東叫 ENMTITIES。這兒就不介紹了等下一篇吧。