曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
10.3 聲明多個屬性
元素通常具有多個屬性。HTML 的IMG 元素可有HEIGHT、WIDTH、ALT、BORDER、ALIGN 和其他幾個屬性 。實際上,大部分HTML
標記都具有多個屬性,XML 標記也是如此。例如,很自然的RECTANGLE 元素需要LENGTH 和WIDTH 屬性:
<RECTANGLE LENGTH= "70px" WIDTH="85px"/>
也可用幾個屬性聲明來聲明這些屬性,一個屬性聲明對應一個屬性。例如:
<!ELEMENT RECTANGLE EMPTY>
<!ATTLIST RECTANGLE LENGTH CDATA "0px">
<!ATTLIST RECTANGLE WIDTH CDATA "0px">
上例說明,RECTANGLE 元素具有LENGTH 和WIDTH 屬性,它們的缺省值均為0px。
可按如下方式,組合兩個<!ATTLIST>標記為一個單一聲明:
<!ATTLIST RECTANGLE LENGTH CDATA "0px"
WIDTH CDATA "0px">
該聲明聲明了LENGTH 和WIDTH 屬性,兩個屬性類型均為CDATA,缺省值為0px。若各屬性的類型或缺省值不同,也可用這種
語法結構進行聲明。如下所示:
<!ATTLIST RECTANGLE LENGTH CDATA "15px"
WIDTH CDATA "34pt">
從個人角度來說,我不喜歡這種風格。看起來很混亂;且為易于辨認,過于依賴于額外的空格在其中的正確放置(盡
管這些空格對標簽的實際意義而言并不重要)。可是你一定會遇到其他人書寫的、這種風格的DTD,所以必須掌握這種 書
寫方法。
XML 實用大全
第 298 頁
10.4 指定屬性的缺省值
若不采用明確指定一個缺省屬性值(如0px)的方式,屬性聲明可以要求作者提供屬性值,或者完全忽略該屬性值,甚至總
是使用缺省值。這三種類型分別由三個關鍵詞#REQUIRED、#IMPLIED、#FIXED 加以指定。
10.4.1 #REQUIRED
有時要選一個恰當的缺省屬性值并不容易。例如,在為創建一個用于內部網的DTD 時,可能要求所有的文檔都至少有一個空
的<AUTHOR1>標記;這些標記通常情況下并不顯示,但可用來識別創建文檔的作者。標記中擁有NAME、EMAIL 和EXTENSION
屬性,以便與作者聯系。例如:
<AUTHOR NAME="Elliotte Rusty Harold"
EMAIL= elharo@metalab.unc.edu EXTENSION= "3459"/>
假設要強制要求在內部網上張貼文檔人的表明身份,就不采取為這些屬性提供缺省值的方法。然而XML 無法阻止任何人把作
者身份定為“Luke Skywalker”(洛克天行者),但至少可通過使用#REQUIRED 的缺省值方式,要求指定作者身份為某個人。
例如:
<!ELEMENT AUTHOR EMPTY>
<!ATTLIST AUTHOR NAME CDATA #REQUIRED>
<!ATTLIST AUTHOR EMAIL CDATA #REQUIRED>
<!ATTLIST AUTHOR EXTENSION CDATA #REQUIRED>
如果語法分析器遇到一個<AUTHOR/>標記,該標記沒有包含這些屬性中的一個或幾個時,將返回一個錯誤。
也可使用#REQUIRED 強迫作者提交IMG 元素的WIDTH、HEIGHT 和ALT 屬性。例如:
<!ELEMENT IMG EMPTY>
<!ATTLIST IMG ALT CDATA #REQUIRED>
<!ATTLIST IMG WIDTH CDATA #REQUIRED>
<!ATTLIST IMG HEIGHT CDATA #REQUIRED>
任何試圖忽略這些屬性的行為(這樣的Web 頁面太多了)都將產生一個不合法文檔。XML 處理器將注意到這種錯誤,并且將
通知缺少這些屬性的作者。
10.4.2 #IMPLIED
有時可能找到一個好的屬性缺省值,但也不想要求文檔作者包含這屬性值。例如,假設在內部網上張貼文檔的一些人擁有電
子郵件地址,但它們沒有電話分機號;為此,不想要求它們在<AUTHOR/>標記中包含EXTENSION(分機號)屬性部分。例如:
<AUTHOR NAME="Elliotte Rusty Harold"
XML 實用大全
第 299 頁
EMAIL="elharo@metalab.unc.edu "/>
如果依然不想為EXTENSION(分機號)提供缺省屬性值,但是想提供作者引入這種類似屬性的能力。在這種情況下,就可使
用#IMPLIED 的缺省值。如下所示:
<!ELEMENT AUTHOR EMPTY>
<!ATTLIST AUTHOR NAME CDATA #REQUIRED>
<!ATTLIST AUTHOR EMAIL CDATA #REQUIRED>
<!ATTLIST AUTHOR EXTENSION CDATA #IMPLIED>
如果XML 處理器遇到沒有EXTENSION 屬性的<AUTHOR/>標記,就不向XML 應用程序提供有用的屬性值。應用程序按收到的通
知進行相應的選擇。例如,應用程序把元素送入SQL 數據庫中,屬性映射為字段,應用程序或許在數據庫相應字段中插入空
的數據。
10.4.3 #FIXED
最后,可能想提供一個不允許作者更改的屬性缺省值。例如,希望為在內部網上張貼文檔的人員的AUTHOR 元素指定一個同
等的COMPANY 標識屬性。方法如下:
<AUTHOR NAME= "Elliotte Rusty Harold" COMPANY="TIC"
EMAIL= "elharo@metalab.unc.edu" EXTENSION="3459"/>
可通過指定缺省值為#FIXED,其后跟隨實際的缺省值,來要求所有的人員對COMPANY 屬性使用該缺省值。例如:
<!ELEMENT AUTHOR EMPTY>
<!ATTLIST AUTHOR NAME CDATA #REQUIRED>
<!ATTLIST AUTHOR EMAIL CDATA #REQUIRED>
<!ATTLIST AUTHOR EXTENSION CDATA #IMPLIED>
<!ATTLIST AUTHOR COMPANY CDATA #FIXED "TIC">
文檔作者不需要在它們各自的標記中真正地引用固定的屬性。如果它們沒有包括固定屬性,則使用缺省值;如果包括了固定
的屬性,無論如何它們使用的屬性值必須一致,否則語法分析器將返回一個錯誤信號。
XML 實用大全
第 300 頁
10.5 屬性類型
前面的所有例子都具有CDATA 類型的屬性。CDATA 是最通用的類型,但此外還允許使用其他九種屬性類型。所有十種類型如
下:
• CDATA
• Enumerated(枚舉)
• NMTOKEN
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(86)