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