曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
效的。列出二十個可選的且不重復的子元素,卻不限制它們出現的順序是不可能的。這到底會
不會成為一個問題取決于文檔是如何產生的。對于由人編寫的文檔,如果僅僅為了讓X M L解析
器驗證有效性就要求文檔的作者按照指定的順序排列所有子元素,這顯然不太合理。
(5) 復合內容的元素
復合元素內容是文檔中最常見的結構,在這種結構中,你可以利用標記以文本形式標志特
定的單詞。標記當然應該是語義標記,而不能是純表示標記,例如:
程序清單4 - 6
根據我們在本章描述的這類正式的建模方法不太容易產生復合內容結構—這并不意味著
這種結構不好。相反,它是一種非常出色的表示信息的方式,特別是對于那些比較模糊的信息,
我們希望捕獲自然語言能夠表達的微妙的有些模棱兩可的含義。有時,試圖將所有事物都規格
化和代碼化是不恰當的。
復合元素內容不僅能夠用來表述事實,而且能夠說明事實的特性。同樣,在大多數流行的信息
建模方法中沒有復合內容的概念,雖然它有許多實際的用途,特別是在醫療記錄、歷史研究及假貨
調查等方面,我們不僅要記錄結論,如:“Thomas Wi l s o n鉛中毒”,而且要記錄與事實相關的觀察資
料:誰在何時下的結論?有什么證據?有多大把握?有人持不同意見嗎?它將產生以下類型的結構:
程序清單4 - 7
復合元素內容并不非常適合這種目的,因為它總是允許任何子元素以任意順序出現任意多
106使用XML 高級編程
下載
次,特別是它允許多個文本內容單元。除了復合元素內容之外,還有幾種更好的可選方案:一
種方法是將“事實”表示為元素,將“事實的特性”表示為這些元素的屬性;另一種方法是為
文本內容設定另一級元素,這樣上述例子將變為:
程序清單4 - 8
但是如果出現大量的沒有注釋的所謂“事實”元素,且只有一個值,將會難于處理。
(6) PCDATA內容的元素
最后,我們將介紹P C D ATA內容。P C D ATA元素是構成文檔的原子,更高級的結構是以它為
基本組成單位的,如果你用元素表示特性,則大部分元素都將是P C D ATA元素。
(7) 對象類型層次建模
在X M L中,沒有明顯的類型層次概念,但是可以用參數實體仿真它,有經驗的D T D設計者
在潛意識中已經形成了這一觀念。
在專用類型的定義中,總是要在派生它的類型的定義中添加一些特殊的內容。例如,對象
類型< r e f u n d >是類型< p a y m e n t >的專有化形式,它在< p a y m e n t >定義的基礎上增加了< r e a s o n >和
< a u t h o r i z e d - b y >等屬性。如果我們在D T D中使用參數實體定義類型,這種擴展能夠以非常自然
的方式來表達。
下面的例子使用子元素表示特性:
程序清單4 - 9
(8) 當幾個特性的數據類型相同時
在前面對建模的討論中,我們曾經提出這樣一個問題:如何命名用于代表兩個獨立特性
B i l l i n g - A d d r e s s和S e r v i c e - A d d r e s s的元素。對于這種情況,你常常會創建幾個有相同數據類型的
元素類型,即:這些元素類型有相同的有效性規則。同樣,在D T D中,你自然可以用參數實體
表示最基礎的數據類型:
第4章數據建模與XML使用107 下載
(9) 在D T D中定義屬性
當你開始定義屬性時,可供選擇的余地已經不大了,它們幾乎完全是按照信息模型構建的。
確定一個屬性是可選的還是必需的一般非常簡單。決定是否要為屬性設定缺省值通常也要
從實際角度出發—它主要取決于當文檔的作者對屬性值不關心時,你作為文檔的設計者是否
認為有必要確定所用的值。當然,當你擴展D T D使之包含前一版本沒有的屬性時,缺省值非常
重要。
從事數據庫設計與開發的人一般不習慣D T D中F I X E D屬性值的概念(對于在D T D中聲明為
F I X E D的屬性,它的每個實例都有相同的值),但是它確實是一種功能非常強大的機制。它可能
用于以下情況:
• 采用類似于J a v a中靜態字段的用法,用它們表示元素類型的屬性,使之區別于實例的屬性。
例如,可以使用固定屬性標識元素的數據類型:因此d a t e - o f - b i r t h字段可能有固定的屬性
d a t a t y p e = " d a t e ";或者可以利用固定屬性命名用于驗證元素實例值的J a v a類。
• 使用它們標識超類。舉例來說,如果使用許多不同的元素標記記錄客戶一生中的不同事件
(例如: o p e n - a c c o u n t,c l o s e - a c c o u n t,s t a r t - s e s s i o n,m a k e - o r d e r,c a n c e l - o r d e r或m a k e -
p a y m e n t),你可能需要某些程序分析特定客戶的所有事件。你不必對表示事件的元素類型
列表進行硬編碼,而是可以給每個元素類型設置一個固定的屬性i s - e v e n t = " y e s ",這樣你的
程序就能夠使用該屬性選擇相關的屬性。例如你可以在D T D中寫入以下代碼:
然后,在用X S LT編寫的應用程序中,可以處理屬于事件的所有元素類型:
• 用于目前是常量,將來可能變化的屬性:例如版本號。
• 與條件部分或參數實體配合使用,提供僅在程序的特定運行中固定的屬性。例如,可以在
外部參數實體中定義名為a c c e s s - r i g h t s的F I X E D屬性,它根據用戶取不同的值。通過使用
以下條件部分,可以在X S LT應用程序中篩選出允許用戶看到的數據:
(10) 選擇屬性類型
C D ATA有傾向成為所有屬性的缺省類型,因為它允許任何字符串作為屬性值,然而實際上
多數屬性很可能都符合N M TO K E N或N M TO K E N S類型。N M TO K E N是由一個或多個字母、數字
或某些標點符號(包括.和-)構成的序列, N M TO K E N S是由空白分隔的N M TO K E N值列表。因
此:
是有效的N M TO K E N值,另外:
是有效的N M TO K E N S值。通過使用這些類型而獲得的額外的有效性是微乎其微的,但是它能
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(46)