曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
2. CDATA
所有的內容最終都會變成文本。當屬性值為純文本時,你可以將該屬性聲明為C D ATA類型。
例如:
該屬性的值可以是任意長度的字符串。唯一的限制是它不能包含標記。上述聲明可以有以
下實例:
只要屬性值是純文本,解析器都會將它視作有效。
3. ID 、I D R E F、I D R E F S:文檔中的關系表示
毫無疑問,對于I D類型的屬性,其值必然是具有唯一標識功能的名稱。而且它們必須遵守
X M L名稱定義的規則。特定元素的I D屬性值在整個文檔中必須是唯一的。它可以作為元素的唯
一標識符。每個元素至多有一個I D類型的屬性。最后需要說明的是, I D類型的屬性必須設置為
# I M P L I E D或# R E Q U I R E D,不能是# F I X E D或缺省的。可想而知,為I D提供缺省值,特別是固定
的缺省值是毫無意義的。這會破壞I D的唯一性。例如,在下面的聲明中,社會保障號( S S N)
作為個人的唯一標識符,并與文件中的個人信息相關聯:
如何使I D類型的屬性發揮作用呢?當然是通過引用。我們可以利用它在兩個對象之間建立
一對一的關系。I D R E F類型可以用于在文檔中創建鏈接和交叉引用。I D R E F屬性的值必須受到
與I D類型同樣的約束。它們必須與文檔中的某個I D屬性具有相同的值。I D R E F值不能指向文檔
中不存在的I D(但是除此之外還有其他方法,我們將在第8章介紹)。在應用程序中,我們通過
第3章文檔類型定義使用63 下載
I D和I D R E F實現交叉引用,而不必多次重復整個元素。如果文檔中包含上述聲明,可以在D T D
中寫入以下聲明:
我們很容易想到,i d屬性是指P e r s o n中的S S N屬性。則文檔中可以寫入以下代碼:
程序清單3 - 8
通過交叉引用, C u s t o m e r可以寫作具有I D R E F屬性的空元素,而不必包含整個P e r s o n元素。
當我們需要P e r s o n信息時,由于P e r s o n元素的S S N屬性與C u s t o m e r的i d屬性具有相同的值,因此
應用程序能夠通過i d找到P e r s o n元素。
有時,我們希望將一個元素與其他多個元素相關聯。這就要依靠I D R E F S類型。它能夠建立
一對多的關系。這類屬性的值是一系列以空格分隔的I D值。其中每個I D必須滿足對I D類型的約
束,當然它們必須與文檔中的I D屬性值相匹配。
以上代碼段聲明了一個空元素,它定義了項目組與成員之間的一對多包含關系。M e m b e r s屬
性通過引用P e r s o n元素列舉出項目組成員的標識, P e r s o n元素是在D T D的其他位置聲明的,它具
有I D類型的屬性。例如:
以上代碼表示的項目組由三個人構成,他們的社會保障號分別是: 111 - 2 2 - 3 3 3 3、2 2 2 - 11 -
4 4 4 4和1 2 3 - 4 5 - 6 7 8 9。
利用I D、I D R E F和I D R E F S,我們可以表示關系數據庫中常見的關系。如果你將X M L作為本
地數據庫與專用數據模式之間的轉換工具,你會深刻體會到這幾種類型的價值。
4. ENTITY、E N T I T I E S:可替換的內容
實體可以用于屬性聲明中,它能夠重用公共的結構,提高代碼效率。對于一個可能多次出
現的結構,你可以聲明代表該結構的實體,然后通過引用實體實現對結構的調用。另外,實體
中可以包含未解析內容,并作為有效的屬性值。通過這種方式,文檔創作者可以引用各種類型
的數據,而不僅僅是X M L標記。如果你有一個圖形文件,并希望將它作為圖解,可以借助實體
將它插入文檔。為此,首先將屬性類型聲明為E N T I T Y:
在D T D中,還要聲明實體:
64使用XML 高級編程
下載
N D ATA(表示法數據)關鍵字說明實體的數據有相應的n o t a t i o n類型(參見后面對
NOTATION類型的討論)。
而后,在X M L文檔中,我們可以在屬性中引用圖像:
以上代碼將G I F文件s a l e s _ c h a r t . g i f與S a l e s R e s u l t元素相關聯。
對于經常要重用的實體,這種方法非常值得推崇。例如,在我們所舉的例子中,每月只
需修改s a l e s _ c h a r t . g i f文件,就可以重用它。但是,假如實體的值需要頻繁修改,這種方法
就不可取了。
為了將E N T I T Y作為屬性類型,你需要執行四個步驟。前三個步驟都是在D T D(外部D T D或
內部子集)中進行聲明。第四個步驟涉及特定的文檔實例。我們將這四個步驟總結如下:
• 聲明一個表示法(我們很快就會介紹有關內容)。
• 聲明一個或多個實體,以便在屬性中使用。
• 為元素聲明類型為E N T I T Y的屬性。
• 在文檔中創建元素類型實例,將實體名稱作為屬性值。
正如我們能夠將多個I D R E F值作為單一的屬性值( I D R E F S),實體也可以有類似的特性。
這就是E N T I T I E S類型,它與I D R E F S具有類似的效果。屬性值中的每個名稱必須符合E N T I T Y
類型的規則,實體名稱之間以空格分隔。因此,我們有以下代碼(我們暫時省略表示法聲
明):
程序清單3 - 9
我們關于事故現場的報告有一個A c c i d e n t S c e n e元素,其中包含現場、汽車和受害者的照片。
5. NMTO K E N、N M TO K E N S:名稱記號
某些情況下,你可能希望將屬性值作為離散的記號,而不是文本。為此我們可以使用枚舉
類型(稍后即將討論該類型),但是,假如我們希望值列表能夠無限擴展呢?這就需要依靠X M L
中稱為名稱記號( name token)的類型。它在D T D中縮寫為N M TO K E N。N M TO K E N類型必須
遵守元素名稱的命名規則,但是其中一項限制除外。它們只能包含字母、數字、冒號、句點和
連字符。然而,與元素和屬性名稱不同的是, N M TO K E N的第一個字符可以是任意字符。下面
的代碼說明了如何聲明N M TO K E N屬性:
第3章文檔類型定義使用65 下載
程序清單3 - 1 0
上述代碼表示元素E m p l o y e e有一個名為s e c u r i t y _ l e v e l的屬性,其值符合X M L名稱記號的規
則。我們可以用它來控制對機密文檔的訪問。由于定義屬性列表時使用了N M TO K E N,而不是
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(27)