曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
• 比起D T D許可,更加準確、靈活地描述詞匯表。
• XML里的“讀”詞匯表規則,允許訪問詞匯表定義,而不用增加解析器的難度。
1 9 9 9年1月1 4日,XML 命名空間達到了W 3 C推薦的程度。模式正在通過標準的方法開展工
作,但很快就需要一種推薦說明書。這種對模式的需求在應用開發團體里非常強大,以至于模
式支持的技術調研小組開始安裝解析器。這是由于為了應付推薦書出來之后模式快速的轉換,
模式草案準備得足夠值得推敲。
7.1 混合詞匯表
回憶一下我們在第3 章見過的圖書目錄D T D 。在建立一個站點之后,用X M L 寫成
P u b C a t a l o g . d t d詞匯表,發布作品目錄,你可以決定在線出售作品。這意味著需要能夠為目錄里
的書籍編排順序。因此,需要一個D T D來研究書籍的順序。
如果繼續按照D T D章節提到的去做,你可能會添加到P u b C a t a l o g . d t d文件,這是因為這兩個
范圍標明了同一個問題—共享書籍數據的不同部分。但它們也可以看作不同的問題領域,這
是因為一個標明了目錄的整體,而其他的標明了目錄里的銷售款項。當被這兩部分傳遞的信息
里有一些重迭,而你又想通過一個D T D去研究兩個領域,就會以被一大堆復雜的D T D所迷惑而
告終。
龐大并且包含很多主題信息的D T D很難讓程序員閱讀和理解。更重要的是,如果你已經在
產品里使用了目錄D T D,D T D的改變可能會影響應用程序。但是這里有更好的解決方案,即融
合利用命名空間的單一文檔中與各個目錄、表單D T D保持一致的數據,因此我們將研究這種可
192使用XML 高級編程
下載
能性。但先讓我們從近處看一下你面臨的問題。
7.1.1 分解問題
首先,你為什么愿意用目錄D T D混合表單的細節呢?至少有兩個問題值得討論,一個是所
有書籍的目錄,另一個是每個題目的出售情況。當你考慮正在寫一個大的程序,會把整個問題
分解成細小的問題。一些結構程序語言按照這種意圖提供了模塊、類、組件、包、函數等。設
計詞匯表可以看作與編程類似的問題。你總是要將一個大的問題分解成多個詞匯表。但是我們
必須要克服的問題其實并不是寫每個D T D去描述許多詞匯表,我們在第3章已經看到怎樣能做到
這一點。如果我們將定義分解成目錄和索引D T D(order DTD)的話,真正的問題存在于整合
D T D進一個文檔的實體。
7.1.2 重用
在P u bCa t a l o g . d t d里我們使用了B O O K元素。某種程度上,在標記描述元素內容的數據的過
程中,這些做得相當完美。但是由于我們想要實現在線定書,當涉及到顧客想要訂購的書籍時,
很可能還想使用相同的元素名稱。的確,兩者很有可能用不同的D T D來描述。畢竟表單里的
B O O K元素可能是表單元素的子級,因此,在P u bCa t a l o g . d t d里這是一個子C ATA L O G。
正如我們已經建議的,這是一個在創建X M L詞匯表時反復出現的問題。在描述真實世界概
念時,我們將要不斷地發現存在著的普遍結構。畢竟,復雜的創作是從簡單的建筑元素—比
如顏色、形狀、價格和尺寸,簡單的事物不能長時間不定義,于是這里將有很多元素名稱的實
例,他們已經有了定義和內容模型。
無論是你還是別人,用這些元素創建了一個D T D,借鑒已經被證明的D T D,你的任務將變
得更加容易(的確,對于處理詞匯表里已經定義的結構的代碼是可以利用的)。這就是重用的含
義。
即便你在為一個公司做計劃,可能被現有的D T D所困擾。實際上,借鑒它們可以使你的工
作變得更簡單,而忽視它們會另每個人的工作很難辦,這是由于因為程序員的參與, D T D代表
了一種特定集合內的智力投資。正如其他人知道的,這些D T D描述了業務問題。在真實的生活
中,建立于與我們的這些例子里的書籍相關的D T D意味著你的任務是去擴展它,這在某種程度
上是當前已經知道和定義了的概念的延續。
的確,如果你正在編寫一個應用程序并和其他合作伙伴的程序進行連接,除了重用現有的
感念之外,沒有別的選擇。使用中的D T D已經形成了一種你為了理解而去講的通用語言。無論
什么時候概念存在,你都應該努力按照概念去理解。
已有定義的使用者正在努力地擴展它們并進行初始化。勸說別人去適應你的關于這個問題
的觀點可能非常困難。即便你能夠完成這項壯舉,也應該認識到建立新的定義和代碼和從現有
的D T D規劃你的新內容相比會付出額外的代價。重用節省時間、人力和資金。
7.1.3 多義性名稱沖突
不論你是重用其他設計者的D T D的定義,還是將離散的D T D連接起來去生成一個描述符合
第7章命名空間和模式使用193 下載
問題的文檔,如果正在使用的文檔里采用相同名稱的元素,你都會冒多義性名稱沖突這一問題
的風險。比如書是一個非常好的概念。你可以確定這里有幾個D T D聲明了“ B O O K”這個元素,
至少有出版商、印刷商、零售商和圖書館等。在文檔里單一使用B O O K名稱需要一個約定,即
要與合適的B O O K元素聲明相匹配。在我們的例子里, B O O K是一個對目錄和表單都通用的名
稱。
一個用P u b C a t a l o g . d t d做標記的文檔可能包括了下面這些對< B O O K >元素的使用:
程序清單7 - 1
因此一個關于書的表單可能需要像下面那樣使用< B O O K >元素:
程序清單7 - 2
如果我在讀一個X M L文檔中包含來自兩種詞匯表的數據,那么怎么知道它指的是哪一種定
義呢?
當你從多個D T D把名稱實例拿過來使用的話,問題變得嚴重了。假如我們有一個土木工程
師參與市政規劃的應用程序。當談到照明,我們為了交通燈和街燈而需要利用已有的D T D。各
自獨立工作,每個詞匯表設計者都會選擇< L i g h t >這個詞來作為元素的名稱。如果他們知道了最
終應使用他們自己的D T D,他們就會選擇< Tr a ff i c S i g n a l >和< S t r e e t L a m p >,但在D T D寫入時,未
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(70)