曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
算符分隔,而且整個組聲明為可出現“零次或多次”:
根據XML 1.0推薦標準中規定的語法,使用復合內容模型時, # P C D ATA關鍵字必須是模
型中的第一個選項。
以上代碼表示可以從I t e m A、I t e m B和# P C D ATA中選擇零個或多個選項。它可以有以下實
例:
程序清單3 - 5
考慮以下內容模型,看看它們各自表達什么含義:
元素f o o包含兩個子元素,第一個永遠是元素A。第二個是B或C。
在上例中, f o o包含兩個或三個按順序排列的子元素。其中B是可選的。
60使用XML 高級編程
下載
表3 - 4
元組運算符含義
? 可選的;可有可無
* 零個或多個
+ 一個或多個
現在,f o o元素變得更加復雜了。它的第一個子元素可以是A、B或D。根據選擇不同,它可
以有一至四個子元素。其中A是可選的,然后是B和C或D,E也是可選的。
在上例中,元素f o o可以有一個或兩個子元素。可能是順序排列的A和B,也可能是C或者D。
讓我們再稍微修改一下這個模型:
在上例中,元素f o o可以包含重復的A、B對列表,或者一個單獨的C或D。借助內容模型,
可以產生變化多樣的子內容實例。例如:
根據上述定義,元素f o o可以包含一個A,零個或多個B、C對,以及至少一個D。
我們希望通過上述例子能夠激發起你嘗試更復雜模型的興趣。內容模型的規則雖然簡單,
但是它能夠產生靈活多樣的結構。為了測試以上定義,你可以在D T D中插入其中一段代碼,然
后編寫符合定義的文檔,并在能夠驗證有效性的解析器上運行。
I n t e r n e t上提供了幾個可以通過We b頁面訪問的解析器。我常用的是h t t p : / / w w w. s t g .
brown.edu/service/xmlvalid/,我經常用它來檢查DTD結構。
現在讓我們來看一看屬性。
3.3.3 屬性
屬性是對元素的補充和修飾,它能夠將一些簡單的特性與元素相關聯。通過屬性,我們可
以給元素綁定大量信息。例如,在H T M L標記I M G中,S R C就是一個屬性。屬性在XML DTD中
是使用AT T L I S T標記聲明的。對于含屬性的元素,至少要通過一個AT T L I S T標記聲明其屬性列
表。AT T L I S T聲明由以下部分構成: AT T L I S T關鍵字、屬性修飾的元素名稱,以及零個或多個
屬性定義。為了增強可讀性,每個屬性定義通常占據單獨的一行。
屬性定義包含屬性名稱、類型和缺省聲明。
在以上代碼中,我們聲明了一個名為A t t r i b u t e N a m e的屬性,它必須在m y E l e m e n t元素實例的
起始標記中出現(# R E Q U I R E D—這是缺省設置),屬性的值是字符串( C D ATA)。
屬性聲明可以有幾種不同的缺省設置,它定義了屬性在文檔中出現的方式。在研究屬性類
型之前,我們先來看看屬性聲明的缺省設置。
1. 缺省值
屬性聲明可以有四種缺省設置,如表3 - 5所示。
表3 - 5
屬性缺省設置含義
# R E Q U I R E D 元素的每個實例必須包含該屬性
# I M P L I E D 元素實例可以選擇是否包含該屬性
# F I X E D加上缺省值屬性的值永遠固定為缺省值;如果元素中不包含該屬性,解析器
第3章文檔類型定義使用61 下載
(續)
屬性缺省設置含義
將缺省值作為屬性值
只有缺省值如果元素中不包含該屬性,解析器將缺省值作為屬性值。否則,
該屬性可以有其他值
如果AT T L I S T聲明中設置了缺省的屬性值,即使文檔中的某些元素實例忽略了該屬性,
X M L解析器仍然會認為該屬性已經被賦予了缺省值。因此,對于下面顯示的屬性聲明,這兩個
元素實例是等價的:
程序清單3 - 6
從上例可以看出,c o l o r屬性聲明有缺省值: b l u e。在第一個元素實例中,我們顯式聲明了這
個屬性,而在第二個實例中,我們省略了屬性。對于解析器來說,這兩個實例是相同的——都
有值為b l u e的屬性c o l o r。
在下面的例子中, B o o k元素包含一個名為l e v e l的屬性。如果我們將l e v e l屬性的缺省值設為
P r o f e s s i o n a l,考慮一下會出現什么情況。
如果文檔中的B o o k元素不含l e v e l屬性,任何處理該元素的應用程序都會認為元素設置了
l e v e l屬性,且值為P r o f e s s i o n a l。如果缺省值出現的幾率非常高,不妨采用這種方式。在這種情
況下,我們可以聲明缺省值,當元素實例的屬性值與缺省值相同時,可以省略該屬性。
然而,這種技術也可能給應用程序帶來麻煩。你必須確保所選擇的缺省值對于應用程序的
處理來說是可靠的。元素的屬性很容易被遺忘。在這種情況下,應用程序將使用D T D中聲明的
缺省值。如果你編寫的代碼極其依賴于屬性值的正確設置,應該使用# R E Q U I R E D關鍵字(或枚
舉值,我們稍后會討論有關內容),以確保屬性值的顯式設置。
下面顯示了元素B o o k的屬性列表,你不必對各部分的含義過于計較:
程序清單3 - 7
在屬性列表中,首先要指定元素名稱B o o k,然后是屬性名稱、類型,以及元素是否必須包
62使用XML 高級編程
下載
含該屬性。可選的屬性用關鍵字# I M P L I E D表示。用關鍵字# R E Q U I R E D修飾的屬性必須出現在
每個B o o k元素實例中。
表3 - 6列出了X M L定義的屬性類型。
表3 - 6
屬性類型含義
C D ATA 字符數據(字符串)
I D 特定文檔中唯一的名稱
I D R E F 對某些具有I D屬性的元素的引用,這些元素的I D屬性值必須與
I D R E F屬性的值相同
I D R E F S 若干以空格分隔的I D R E F
E N T I T Y 已定義的外部實體的名稱
E N T I T I E S 若干以空格分隔的E N T I T Y名稱
N M TO K E N 名稱
N M TO K E N S 若干以空格分隔的N M TO K E N
N O TAT I O N 接受一個在D T D中聲明為用于指示表示法類型的名稱
[枚舉值] 接受用戶顯式定義的屬性可選值中的一個值
下面讓我們依次討論這些屬性類型。
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(26)