曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
一套語法,與文檔實例的語法截然不同。更重要的是,如果X M L解析器能夠使應用程序簡便地
訪問它們所處理的D T D中的聲明,就會使D T D成為一種非常有用的工具。遺憾的是,目前幾乎
沒有解析器能夠做到這一點。這一現(xiàn)狀妨礙了我們利用D T D驗證文檔的有效性,以及將相應領
域的信息傳達給編程人員。我們的應用程序無法了解D T D中的聲明及其結構。
類似地,我們不能使用解析器動態(tài)創(chuàng)建D T D。這似乎不是一個重要的限制。畢竟, D T D被
認為是恒定不變的定義,而不像動態(tài)建立的文檔那樣需要進行有效性驗證。即使如此,仍然有
一些需要根據(jù)條件做出選擇的情況,例如:根據(jù)某些值改變詞匯表規(guī)則。我們可以從數(shù)據(jù)庫讀
取當前值,并據(jù)此構建D T D。該D T D可以用來創(chuàng)建一系列文檔,這些文檔在當前狀態(tài)下是有效
的。然后,D T D將隨文檔一起傳送,以便接收者根據(jù)文檔創(chuàng)建時的環(huán)境狀態(tài)驗證文檔的有效性。
D T D提供的條件選擇結構不能實現(xiàn)上述功能,因此不得不動態(tài)創(chuàng)建D T D。如果缺乏解析器的支
持,我們只能手工創(chuàng)建D T D。
D T D是一種封閉的結構。X M L詞匯表的規(guī)則完全包含在D T D中。如果你不需要從其他D T D
借用聲明或結構,或許感受不到這方面的局限性。由于實體處在一個很低的層次,因此試圖改
善D T D擴展性的工作往往徒勞無功。事實上,沒有簡明的方法能夠改善D T D的擴展性。對于可
擴展的標記工具, D T D也顯得極不合作。我們無法根據(jù)概念和對象的相關性將聲明分為若干段。
假如能夠做到這一點,就可以創(chuàng)建許多描述各個商業(yè)領域的D T D,然后通過引用將它們粘合在
一起,以滿足真正的應用需求。當我們在第7章討論命名空間和模式時,會分析各種借用信息的
可能性。它涉及的內容超出了D T D的范圍。
D T D在數(shù)據(jù)類型信息方面也存在一定的缺陷。它所提供的唯一工具就是表示法。我們無法
根據(jù)現(xiàn)有的類型定義自己的新類型。表示法能夠為一種未解析文本標記一個名稱,但是這與強
大的類型定義機制有著本質區(qū)別。我們希望將某些值表示為簡單類型,例如:數(shù)字,而不是文
本,并對這些值執(zhí)行恰當?shù)牟僮鳌?br />
在W 3 C提出彌補D T D不足的解決方案之前,已經出現(xiàn)了其他一些模式機制,我們將在第7章
介紹有關內容。然而,暫時不考慮D T D的缺陷, D T D是目前唯一一種聲明X M L詞匯表結構和內
容的正式方法。D T D是非常基礎性的概念,它有助于理解其他模式,以及如何利用X M L通過標
準的方式交換文檔。
第3章文檔類型定義使用69 下載
3.5 用于圖書目錄問題的DTD
現(xiàn)在,讓我們利用本章所學的內容為圖書出版領域定義一個X M L詞匯表。更明確地說,在
下面的例子中,我們將要定義描述圖書目錄的語法。從最通用的角度講,我們的詞匯表將涉及
一類圖書。從最精確的角度講,我們可以利用詞匯表從整體上描述圖書。我們將允許文檔創(chuàng)作
者包含圖書本身的目錄。這似乎超出了我們的討論范圍。如果需要的話,我們能夠提供某種形
式的圖書文檔鏈接,但是在進行圖書分類時,確實沒必要包含其目錄。
3.5.1 圖書目錄問題的正式定義
我們首先來描述一下要建模的業(yè)務流程。目前,你還不必擔心D T D。一旦理解了要處理的
業(yè)務流程,你就能夠建立漂亮的模型,急于創(chuàng)建規(guī)則往往會影響你對問題本身的理解。我們要
做的第一件事情是設計問題空間的主要對象及其相互關系。
1. 問題模型
首先必須明確的是,我們要討論的是一個目錄。我們要描述的所有內容都包含在這個目錄
中。我們不會涉及各個目錄之間的關系,而僅考慮目錄本身的內部關系。這有助于我們集中注
意力,我相信這是編寫優(yōu)秀的X M L詞匯表的關鍵。
目錄中包含一本或多本圖書—這就是整個詞匯表。如果我們停留在這樣的認識上,會遺
漏什么問題嗎?圖書是由出版社出版的,因此我們應該在目錄中包含出版社。一個出版社就夠
了嗎?當然。這就意味著一家出版社至少需要一個Book Catalog文檔。雖然它也可以有多個文檔。
出版社有時會涉獵多個領域。這對我們的模型有影響嗎?它們是如何組織的?通常,目錄是根
據(jù)主題組織的。而主題是出版社出版的內容。如果一家出版社擁有大量書籍,它會根據(jù)某些主
題或知識領域劃分出更細的目錄。
就問題本身而言,并不需要包含多家出版社。但是既然談到這個因素,你可能會考慮誰還
有可能使用該模型。圖書館或圖書收集者會有同樣的需求,他們需要根據(jù)主題來描述圖書。圖
書銷售商也有類似的需求。這三類用戶需要在他們的類別中包含多個出版社。通過這方面的修
改,為該模型創(chuàng)造了更多的應用機會。這種修改通常意味著你遇到了問題。你可能轉移了問題
的方向。然而,在本例中卻不是這種情況。我們仍然能夠滿足單一出版社的需求。無論有多少
出版社,在出版社信息之后,文檔包含的依然是一系列圖書摘要。從“有且僅有一個”出版社
變?yōu)?ldquo;一個或多個”出版社使得我們的模型更加靈活,同時并不影響我們要描述的內容。
主題是什么?它是用于組織知識或討論的線索。它類似于新聞組中的線索。主題或線索通
常可以從書名或書的目錄獲得,但是我不希望采取這種方式。線索應該有自己的描述性信息。
到目前為止,我們得到了圖3 - 1所示的組織圖。
在我們的模型中,一個目錄包含一家或多家出版社、零個或多個線索,以及一本或多本圖
書。現(xiàn)在,我要討論兩個問題。它們都是關于我對問題空間所做的假設。第一個問題是元組的
數(shù)目。為什么我會認為圖書和出版社可以是“一個或多個”,而線索甚至可以不出現(xiàn)?不包含任
何書籍的圖書目錄是一種極端情況,只有數(shù)學家會對此感興趣。我們基本上不會對空集有興趣
——如果目錄為空,有什么必要討論它嗎?這是個具有實際用途的詞匯表,而不是理論意義上
70使用XML 高級編程
下載
的。然而,詞匯表中可以沒有用于組織圖書的出版社線索。
圖3-1
談到出版社,又出現(xiàn)了一些不太明確的問題。有些情況下,我們只對目錄中的書感興趣。
中國航空網 m.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(29)