曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
定義這些D T D都能夠共享的外部參數(shù)實(shí)體。
• 可以為所有文檔類型使用相同的D T D,但是每一部分使用不同的頂級(jí)元素標(biāo)記。D T D沒有
規(guī)定哪個(gè)元素應(yīng)該作為文檔元素,因此可以在同一D T D中定義幾個(gè)文檔類型。通過這種方
式,各個(gè)文檔類型之間可以方便地互相引用。
D T D本身不一定是一個(gè)孤立的實(shí)體;它可以通過外部參數(shù)實(shí)體引用其他D T D中的定義,或
者通過條件部分進(jìn)行參數(shù)化,因此它實(shí)際上能夠變得非常靈活。遺憾的是,這同時(shí)也意味著復(fù)
雜性:組織機(jī)構(gòu)常常會(huì)發(fā)現(xiàn)由于某個(gè)D T D過于復(fù)雜,而導(dǎo)致其他人無(wú)法理解它。
無(wú)論選擇哪種方法,都應(yīng)該盡量保證不同文檔類型的通用性。這意味著要將名稱和地址等
公共部件標(biāo)準(zhǔn)化,將元素和屬性的命名規(guī)則標(biāo)準(zhǔn)化,將消息的時(shí)間標(biāo)簽和序號(hào)等重要數(shù)據(jù)標(biāo)準(zhǔn)
化。
本章稍后將進(jìn)一步討論D T D的設(shè)計(jì)。
4.2.2 將信息模型映射到XML
在本節(jié)中,我們將詳細(xì)介紹如何將信息模型的不同部分映射到X M L文檔結(jié)構(gòu)。
1. 表示對(duì)象類型
通常,信息模型中的對(duì)象類型將轉(zhuǎn)換為X M L結(jié)構(gòu)中的元素類型。
你可以將對(duì)象類型名稱作為元素名稱,或者如果對(duì)文檔占用的空間很在意,可以采用對(duì)象
類型名稱的縮寫。大多數(shù)人都喜歡給元素標(biāo)記使用短名稱,這不僅僅是為了節(jié)省空間,而且因
為它能夠增強(qiáng)X M L的可讀性:或許它能夠避免人們將過多的注意力集中于標(biāo)記,而忽視了真正
的內(nèi)容。
對(duì)象類型是類型層次的一部分,你能夠選擇從哪一層開始建立X M L元素。舉例來(lái)說(shuō),如果
d e p o s i t是p a y m e n t的子類,可以將< d e p o s i t >作為元素標(biāo)記;或者將< p a y m e n t >作為元素標(biāo)記,并
通過其他方式說(shuō)明這是一個(gè)d e p o s i t,或許可以借助屬性,如: <payment type="deposit">。
使用最特殊的類型( d e p o s i t)的優(yōu)越性體現(xiàn)在D T D能夠更精確地定義與該元素相關(guān)的屬性
和子元素。使用更通用的類型( p a y m e n t)的優(yōu)越性體現(xiàn)在它從一定程度上簡(jiǎn)化了應(yīng)用程序代碼
的編寫,你不必關(guān)心它到底是哪種類型的p a y m e n t。
永遠(yuǎn)記住,設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)時(shí)不要單純?yōu)榱顺绦騿T編寫第一個(gè)應(yīng)用程序方便。因?yàn)楫?dāng)這個(gè)程
序壽終正寢后,數(shù)據(jù)結(jié)構(gòu)仍然會(huì)存在很長(zhǎng)時(shí)間。
2. 表示關(guān)系
模型中的某些關(guān)系可以利用X M L文檔結(jié)構(gòu)中的元素嵌套表示。顯然,“包含”關(guān)系可以通過
這種方式表示,例如: < f o o t n o t e >元素可以嵌套在< c h a p t e r >元素中, < h o t e l >元素可以嵌套在
< r e s o r t >元素中。
第4章數(shù)據(jù)建模與XML使用93 下載
毫無(wú)疑問,一個(gè)元素只能被一個(gè)父元素包含,因此必須采用其他方式處理模型中其余類型
的關(guān)系。實(shí)際上,這意味著某種鏈接。
在X M L中,有幾種表示從一個(gè)元素到另一個(gè)元素的鏈接的方法:
• 可以使用I D和I D R E F屬性。I D屬性包含的值能夠在文檔中唯一標(biāo)識(shí)元素; I D R E F屬性的值
必須與文檔中某個(gè)元素的I D相同。因此,I D可以作為關(guān)系數(shù)據(jù)庫(kù)中的主關(guān)鍵字, I D R E F作
為外部關(guān)鍵字。另外,不要忘記I D R E F S數(shù)據(jù)類型,關(guān)系數(shù)據(jù)庫(kù)中沒有直接與之對(duì)應(yīng)的結(jié)
構(gòu): I D R E F S包含一組以空格分隔的I D R E F值,因此它可以作為一對(duì)多關(guān)系的“一”端,
或者多對(duì)多關(guān)系的任何一端。
• 可以使用X P o i n t e r引用。它與H T M L中我們熟悉的H R E F屬性等價(jià)。可以通過X P o i n t e r值引
用同一文檔或其他文檔中的元素。
• 可以在X M L文檔中使用應(yīng)用程序定義的主關(guān)鍵字和外部關(guān)鍵字,而不對(duì)它們進(jìn)行特殊聲明。
應(yīng)用程序知道這些值是用于表示關(guān)系的,而X M L軟件會(huì)將它們視作普通數(shù)據(jù)。
以上三種方法各有所長(zhǎng)。使用I D / I D R E F的主要優(yōu)勢(shì)在于X M L解析器能夠幫助你進(jìn)行文檔的
有效性驗(yàn)證。遺憾的是,標(biāo)準(zhǔn)的D O M接口并不提供根據(jù)I D尋找元素的方法,但是許多D O M實(shí)現(xiàn)
都通過專有的接口彌補(bǔ)了這一缺陷,例如M i c r o s o f t提供了n o d e F r o m I D()方法。X S LT也提供了
使用I D值的機(jī)制,但是通過將I D值作為關(guān)鍵字訪問元素并不比通過非I D值訪問元素更加有效,
因?yàn)樗恢С謭?zhí)行更高級(jí)的操作。使用I D還有其他局限性,例如,它們?cè)谡麄(gè)文檔中必須是唯
一的(僅僅保證在一個(gè)元素類型中的唯一性是不行的),每個(gè)元素只能有一個(gè)I D屬性,它們必須
遵守X M L名稱的語(yǔ)法規(guī)范(這意味著“ 2 3 4”、“I 1 8 / 2 9 6”和“ABC 123”都不是有效的I D)。因
此,這種方法不占有絕對(duì)優(yōu)勢(shì)。
在下面的例子中,使用I D是非常合適的。在團(tuán)體旅游的旅行計(jì)劃中,有可選的活動(dòng)和游覽
項(xiàng)目,但是旅游團(tuán)中的每個(gè)人并非都有相同的選擇。例如,父親母親要去娛樂場(chǎng)所,而小孩要
去動(dòng)物園。在旅行計(jì)劃中,我們將通過以下方式表述這種情況:每名游客都有一個(gè)I D值,在游
覽項(xiàng)目中,利用I D R E F S字段列出所有參加該項(xiàng)目的游客,具體代碼如下:
程序清單4 - 2
94使用XML 高級(jí)編程
下載
在以上代碼中,我們采用了單向鏈接—從游覽項(xiàng)目到游客。當(dāng)然,我們也可以使用反向
鏈接,在< t r a v e l e r >元素中設(shè)置游覽項(xiàng)目屬性,或者可以使用雙向鏈接。通常,我盡量避免雙向
鏈接,因?yàn)樗a(chǎn)生的唯一結(jié)果就是必須檢查一致性,并確定當(dāng)出現(xiàn)不吻合的情況時(shí)該如何處理。
如果決定使用單向鏈接,無(wú)論哪個(gè)方向都可以。對(duì)于一對(duì)多關(guān)系,你會(huì)本能地在“多”端使用
I D R E F S屬性,因?yàn)樵陉P(guān)系型表中就是這樣處理外部關(guān)鍵字的,但是在“一”端使用I D R E F S屬
性也未嘗不可。
X P o i n t e r引用比I D / I D R E F更加靈活,然而遺憾的是它尚未完全標(biāo)準(zhǔn)化,而且未被廣泛實(shí)現(xiàn)。
令人欣慰的是這種局面即將得到改善—X P a t h標(biāo)準(zhǔn)的制定工作接近尾聲,它已經(jīng)成為W 3 C建議,
它將作為以前的X P o i n t e r語(yǔ)法的替代品。X P o i n t e r的優(yōu)勢(shì)在于它允許從一個(gè)文檔到另一個(gè)文檔的
中國(guó)航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(40)