曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
7.8.1 為什么煩惱
我們的Book Catalog DTD出了什么問題?實際上,它正開始有起色。如果我們合適地驗證
了目錄文檔,有關Book Catalog的每一樣東西必須進入一個D T D。本章前面普遍應用我們特有的
D T D時,所有的批評都瞄準了D T D。
我們要做的第一件事是將出版目錄范圍分成兩個分離的模式,一個反映處理作者的命名空
間,另一個處理目錄信息。另外,我們能夠對一些的屬性和元素提供很強的分類,因此到了書
寫處理目錄的應用程序時,我們的工作變得更加輕松。因為XML 模式是一種流的狀態,它接近
推薦書里的狀態,我們將要在M S X M L里使用X M L - D R版本的模式。
1. 分割
在第3章見到的c a t a l o g . d t d給了我們許多概念。一個目錄一定需要b o o k s,但如果作者存在目
錄外面不是更好嗎?畢竟,如果我們需要為標記每本書的的真實內容寫一個模式,或許想同時
在這里包含作者信息。這就是將Book Catalog DTD分成兩個獨立的模式的主要動機: C a t a l o g和
A u t h o r。當我們想要創建一個目錄文檔,能夠為Catalog 模式聲明一個缺省的命名空間,然后使
用一個驗證過的命名空間去引進Author 模式。
2. 附加的語法
在c a t a l o g . d t d里有幾個屬性,能夠提供強大的分類功能。如果我們包含數據類型,它將非常
容易地用來計算總頁數,我們將肯定喜歡能夠從來自目錄的一個定單計算定單總數。因此需要
仔細查閱Catalog 模式,看什么樣的屬性應該用類型信息檢驗。
3. 元數據發現
用X M L語法創建一個模式對于程序員非常有用,在那里為他們提供一些對編寫程序的支持,
對此操作手冊的目錄文檔根據我們的模式做了標記。我們提供的最大支持是簡單地使D T D帶有
模式表單形式。一旦它采用X M L語法,程序員能夠使用相同的解析器,他們曾用它與X M L文檔
實例一起來發現元數據背后的含義。
假設你不熟悉我們的模式。你能夠用< d e f i n i t i o n >元素調查單個元素。這在文檔瀏覽器里非
常有用。一個用戶可能單擊為得到特定條目的附加信息,查看與之相連的元數據。我們不愿意
表現X M L定義,當然如果一個條目是數值類型,我們可能會顯示。在枚舉的情況下,當然顯示
條目能取的數值的范圍。主要信息能夠看到很重要,比如說一個屬性是否是必須的。只要我們
用X M L語法提供一個模式,所有這些能夠在文檔實例被讀到時發現。在我們將catalog DTD轉成
230使用XML 高級編程
下載
一個模式之后,將顯示能夠怎樣去使用D O M在模式里生成相互協調的元素。這些將采用一個模
式,同時提供給你一些參照元素以及它們是怎樣使用的。
7.8.2 重鑄DTD
仔細看一下我們的D T D。我們將做完一個到X M L - D R格式的轉換,正像我們所做的,顯示
對定義不斷的改進。
對于XML-DR 模式文件擴展還沒有明確的一致意見。M i c r o s o f t發起者趨向使用x m l,與此
同時,一個商業化可用的工具使用x d r。如我們看到的,W3C 模式工作組傾向為他們的模
式使用x s d。我將在下面的例子里使用x m l。無論什么情況,模式是X M L,于是它的M I M E
類型保留text/xml。
目錄分成三個部分(參見圖7 - 3):
• 有關出版者的出版商信息( P u b l i s h e r)。
• 包含描述信息的線索( T h r e a d s)。
• 包含有關書籍的信息( B o o k s)。
圖7-3
出版商信息部分也包括作者信息細節,但是我們正打算刪除作者信息,將它們放在獨立的
作者模式里,于是我們能在目錄模式里借用,并在其他地方使用它們。因此,在回到目錄的其
他部分之前,讓我們從作者模式開始。
1. 作者模式
我們應該首先看一下作者模式,這是因為接下來建立的目錄模式將要從它那里借鑒些內容。
第一件要做的事是去掉< A u t h o r >元素聲明和一切從屬于它的東西,建立新的模式文件—
a u t h o r s . x m l。文件開始應該聲明與XML 1.0的一致性,命名模式以及聲明X M L - D R和數據類型命
名空間:
程序清單7 - 3 8
缺省的命名空間是X M L - D R以及數據類型命名空間將用前綴d t加別名。A u t h o r元素是我們的
第7章命名空間和模式使用231 下載
起點。它只是依次包含與名稱相關的、< B i o g r a p h i c a l >和< P o r t r a i t >元素等元素內容:
在X M L - D R里,這些變成了:
程序清單7 - 3 9
我們為a u t h o r C i t e I D保留了XML ID類型以用來保存作者和書籍之間的連接。注意特別是在
M I上的重要部分。它可能出現零次或者一次,這就是說,它是可選的。現在聲明< A u t h o r >的子
元素:
程序清單7 - 4 0
關閉最高級< S c h e m a >元素和你已經做了。現在你有一個可以重用的模式,它能被引進我們
標記作者元素信息的任何地方。
2. 目錄模式
既然從目錄D T D移走了作者信息,將它們放在單獨的模式里,我們將注意力轉向重建X M L
里的目錄數據。我們將稱這個模式為P u b C a t a l o g . x m l。當需要包含作者細節時,這些將從作者模
式借用過來。這里是開放的信息:
程序清單7 - 4 1
注意怎樣為我們新建立的作者模式—a u t h o r s . x m l用別名前綴a t h r添加一個命名空間。
讓我們深入研究一下:我們以< C a t a l o g >元素開始,它包含其他信息。這里包括< P u b l i s h e r >、
< T h r e a d >和< B o o k >元素,就像我們在早期的c a t a l o g . d t d里有過的那樣,其中的每一個可能出現
232使用XML 高級編程
下載
很多次:
程序清單7 - 4 2
下面我們需要聲明i s b n屬性,它將用在我們剛剛聲明的< P u b l i s h e r >和< B o o k >元素里:
(1) 出版商
我們需要著手的下一部分是剛剛聲明的< P u b l i s h e r >元素的內容。它還包含在D T D里看到的
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(84)