曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
三個C a t e g o r y元素的實例。
X M L模式能夠提供更精確的控制,我們將在第7章介紹有關內容。我們將使用模式語法說
明Category至少出現三次,且至多出現三次。
P r i c e元素有屬性c u r r e n c y,它用于說明圖書價格的貨幣單位。在該D T D中,我們規定只能選
擇美元、加元或英鎊。
我們很容易增加貨幣單位的種類。這就是為何我們將P r i c e設計為元素,而不是屬性。通常
情況下,我們可以將一個簡單的原子特性設計為屬性。由于我們要處理國際貿易,因此必須指
定P r i c e內容的貨幣單位,以便滿足應用程序的需求。我希望說明貨幣單位是應用于P r i c e的。所
以,我沒有將價格和貨幣單位都作為B o o k的屬性。通過將P r i c e說明為有# P C D ATA內容的元素,
我可以將c u r r e n c y作為屬性,并顯式指定它的內容。
下面的程序清單顯示了B o o k元素的屬性:
程序清單3 - 1 9
第3章文檔類型定義使用75 下載
這是目前為止我們見到的最復雜的屬性列表。I S B N當然是圖書唯一的I S B N號,我們將它作
為I D類型以便于引用。L e v e l屬性代表出版社給圖書設置的難度級別。你正在閱讀的這本書設置
為P r o f e s s i o n a l。該屬性的值是由各個出版社自行定義的。雖然大多數出版社都有類似的概念,
但它并不是通用的,因此我將它指定為可選的屬性。然而,如果元素包含該屬性,它可以作為
排序或過濾的關鍵字。p u b D a t e和p a g e C o u n t屬性分別代表圖書的出版日期和頁數。
D T D語法不允許定義日期和數字類型,雖然我們在此非常需要這兩種類型。應用程序可
以通過簡單的算法計算圖書面世的時間,以及一套書的總頁數。D T D不允許傳遞用于這
類計算的信息。它們必須隱含在對詞匯表的認識中。XML模式將解決這類問題。
我們已經在D T D中定義了幾個I D類型的屬性。現在終于到使用它們的時候了。屬性a u t h o r s
的值是指向代表特定作者的I D的a u t h o r C i t e I D值的一個或多個引用。例如:
以上代碼表示書的作者是a u t h o r C i t e I D值分別為s m o h r、m k a y和m b i r b e c k的作者。屬性
t h r e a d s與屬性a u t h o r s類似,它將一本圖書與一個或多個知識線索相關聯:
由于線索可以引用多個I D,因此能夠從多條途徑分析目錄。用戶可以查閱一個目錄文檔,
并根據他所感興趣的一條或多條線索進行過濾。出版社能夠以目錄文檔為基礎,根據線索和級
別選取圖書,產生適當的閱讀列表。
最后, i m p r i n t屬性是對出版社印記的引用。一本書只能有一個印記,因此該屬性是I D R E F
類型的。B o o k元素中為什么沒有關于圖書的出版社的屬性?書的I S B N包含出版社的編號。這個
編號位于I S B N中的固定位置,所以我們能夠從I S B N中提取出版社編號,并搜索具有相同i s b n屬
性值的P u b l i s h e r元素。為了進一步簡化,我們也可以根據i m p r i n t的值進行搜索。它能夠直接得
到P u b l i s h e r元素,而不必象I S B N那樣需要從屬性值中提取子串。實際上,上述兩種方法都不是
直截了當的,但是它們都很實用。
任何設計工作都會產生各種不同的結果。你完全可以根據自己的經驗或需求考慮類似的圖
書出版或目錄信息問題。看看你會設計出什么樣的D T D;我是否忽略了你所需的某些概念。你
也可以嘗試著通過不同的方式表達同樣的想法,或許對于你來說,它更加有效。到底應該將某
個項目模型劃為元素還是屬性,人們常常會在這方面產生爭論。你不妨修改一下我的設計方案,
看看會產生怎樣的后果。優秀的D T D設計來自于經驗和試驗。
(5) 完整的D T D
下面是P u b C a t a l o g . d t d的完整清單。本書的其他章節將用到它:
程序清單3 - 2 0
76使用XML 高級編程
下載
3.5.2 對象關系問題
請特別注意我們如何利用I D、I D R E F和I D R E F S類型的屬性說明模型中對象之間的關系。這
第3章文檔類型定義使用77 下載
些類型雖然結構簡單,但是能夠解決復雜的問題。XML 1.0在這方面涉及的內容非常有限,它僅
僅指出I D在文檔中必須是唯一的。規范中并未強制定義任何編程語法。如果應用程序需要使用
該特征,我們必須自己提供編程支持。我們不能期望符合XML 1.0規范的解析器提供鏈接功能。
目前,某些解析器準備支持X S L,它使我們能夠在不進行過多編程的情況下簡便地實現鏈
接功能。然而,這是X S L的特性,而不是X M L的特征,如今市場上的大多數解析器都不
提供該功能。
盡管如此, I D和I D R E F仍然是X M L中的重要結構。它使我們能夠在一個純文本的文檔中實
現類似于關系數據庫中的關系模型。如果你所設計的詞匯表要被一些未知的應用程序使用,就
會發現這兩種結構非常重要。只要知道存在關系,就可以利用適當的屬性列表聲明捕獲信息。
應用程序能夠充分利用該信息。
3.5.3 進一步討論
D T D語法還存在著一些局限性。它主要體現在以下三個方面:
• 所有內容必須寫入同一D T D:沒有分段,除非利用適當的聲明和參數實體機制將一個D T D
從邏輯上分為若干子D T D。然而在解析時,驗證有效性所需的聲明不能從邏輯分隔的模式
實體中提取出來。
• DTD與X M L文檔采用不同的語法(因此需要兩種不同的解析機制)。
• 某些事物的表述存在缺陷,例如:類型和元組。
我們的圖書目錄D T D不太長,也不十分復雜。即使如此,我們涉及的兩個概念—出版社
和作者—也可以應用于其他領域。有些D T D聲明能夠跨領域重用,在新的D T D中,必須包含
這些D T D組件。然而,如果問題空間比較復雜,可能會產生一些麻煩。如果你需要驗證文檔的
有效性,就必須從邏輯上將X M L詞匯表涉及的所有內容都包含在同一D T D中,這使得我們很難
動態構建跨領域的內容, X M L模式在這方面有所增強。
D T D的語法與X M L文檔使用的語法截然不同。驗證有效性的X M L解析器能夠處理D T D,但
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(32)