曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專(zhuān)營(yíng)店坑蒙拐騙欺詐消費(fèi)者
(3) 復(fù)合類(lèi)型定義
這些是XML 模式里重要的結(jié)構(gòu)。沒(méi)有它們,將不能組成重要的元素內(nèi)容模型。< t y p e >元素包
含在一個(gè)復(fù)合的類(lèi)型定義里。嵌套在里面,我們聲明了元素和屬性,或者對(duì)模型組的引用。例如:
程序清單7 - 1 5
復(fù)合類(lèi)型定義可能變得非常棘手。在學(xué)習(xí)了怎樣去聲明屬性和元素之前,這些非常難以理
解。在我們向前走時(shí)你把注意力放在看到的< t y p e >元素上,然后你將會(huì)明白我的意思。
(4) 屬性與屬性組
屬性聲明由< a t t r i b u t e >元素組成,而< a t t r i b u t e >元素至少包含一個(gè)n a m e屬性。< a t t r i b u t e >元素也有
可選的c a r d i n a l i t y屬性:m i n O c c u r s和m a x O c c u r s,它可用來(lái)指出屬性是否顯示,以及如果是,經(jīng)常怎
樣顯示。一個(gè)t y p e屬性指明了屬性的數(shù)據(jù)類(lèi)型,比如說(shuō)字符串或整型。一個(gè)屬性聲明可能是d e f a u l t和
f i x e d屬性。這些更像D T D里的關(guān)鍵字I M P L I E D和F I X E D。f i x e d屬性的值是必須經(jīng)常有的值。d e f a u l t
屬性的值是假如屬性沒(méi)有明確地在X M L文檔元素里出現(xiàn)時(shí)的值。這里有屬性聲明的幾個(gè)例子:
我們經(jīng)常遇到一組相關(guān)的屬性,它們?cè)谝粋(gè)模式里應(yīng)用于多元素聲明。XML 模式結(jié)構(gòu)為這
些提供屬性組的想法。這是一個(gè)命名的屬性聲明的集合:
程序清單7 - 1 6
212使用XML 高級(jí)編程
下載
這里我們聲明了t r o o p P a r a m e t e r s屬性組,然后在o ff i c e r P a r m s類(lèi)型定義里使用了它。
(5) 內(nèi)容模型
我們不想在沒(méi)有內(nèi)容模型時(shí)進(jìn)展得太遠(yuǎn),并且
XML 模式提供了比D T D更準(zhǔn)確的描述內(nèi)容模型的機(jī)
制。它們使用復(fù)合類(lèi)型定義和一個(gè)新的結(jié)構(gòu),
< g r o u p >元素,去建立元素聲明的內(nèi)部?jī)?nèi)容。
我們現(xiàn)在需要類(lèi)型元素的另一個(gè)屬性—c o n t e n t
屬性(參見(jiàn)表7 - 1)。c o n t e n t屬性告訴我們哪種元素能
被包含(盡管它沒(méi)指出有關(guān)許可的屬性的任何內(nèi)容):
例如:
程序清單7 - 1 7
當(dāng)我們接觸到只含有元素的內(nèi)容時(shí),事情變得更加有趣。現(xiàn)在需要一些內(nèi)容操作者—模
式草圖里術(shù)語(yǔ)稱(chēng)為排序,去演示怎樣排列內(nèi)容。這些排序是< g r o u p >元素o r d e r屬性的值。這個(gè)新
元素給了我們一種方法去提供聲明里有序的元素實(shí)體。排序顯示在表7 - 2中。
表7 - 2
排序關(guān)鍵字含義D T D等價(jià)物
s e q 元素必須按準(zhǔn)確的順序排序,(逗號(hào))
c h o i c e 模型元素之一準(zhǔn)確地出現(xiàn)|(管道符號(hào))
(6) 元素聲明
這里我們能立即看到X M L怎樣用來(lái)在X M L應(yīng)用里生成模式語(yǔ)法,在那里我們必須使用
< ! E L E M E N T語(yǔ)法去在一個(gè)D T D里聲明一個(gè)< B o o k >元素,現(xiàn)在將元素聲明放在X M L元素里,于
是我們使用:
這里< e l e m e n t / >元素用來(lái)聲明一個(gè)元素(這個(gè)元素描述它的內(nèi)容為了保持與自我描述數(shù)據(jù)的
一致性)。n a m e屬性簡(jiǎn)單擁有一個(gè)我們正在生成的元素的值。
簡(jiǎn)單元素由數(shù)據(jù)類(lèi)型和一系列屬性聲明的引用或一個(gè)屬性組的引用組成。這與D T D的這種
第7章命名空間和模式使用213 下載
表7 - 1
內(nèi)容屬性值含義
u n c o n s t r a i n e d 任何類(lèi)型的內(nèi)容
e m p t y 空元素
m i x e d 元素和字符數(shù)據(jù)
聲明類(lèi)似:除了內(nèi)容被賦了類(lèi)型,元素只包含P C D ATA。比如:
這些將符合:
當(dāng)然,這里將沒(méi)有D T D那里的字符串和浮點(diǎn)數(shù)值類(lèi)型的概念。當(dāng)我們想要用結(jié)構(gòu)定義一個(gè)
元素,用一個(gè)內(nèi)容模型替代這個(gè)數(shù)據(jù)類(lèi)型引用。讓我們將這個(gè)放在一旁,然后看怎樣通過(guò)在其
他聲明添加引用來(lái)建立一個(gè)元素聲明。為這個(gè)簡(jiǎn)單的X M L片段說(shuō)明一下模式:
程序清單7 - 1 8
這里是需要的元素聲明:
程序清單7 - 1 9
這些已經(jīng)足夠簡(jiǎn)單了。F i r s t,M I和L a s t是字符串。注意,我已經(jīng)將M I字符串轉(zhuǎn)化成了合適
的長(zhǎng)中間大寫(xiě)字母,比如像O ' M或A . G。現(xiàn)在我們將要把它們包裹在一起成復(fù)合元素< N a m e >。
例子通常是學(xué)習(xí)的最好方法,這里有一些例子以及它們的D T D等價(jià)物:
程序清單7 - 2 0
214使用XML 高級(jí)編程
下載
現(xiàn)在,我們希望能夠描述元素內(nèi)容的多發(fā)性問(wèn)題。為了做到這個(gè),我們使用元素引用上的
m i n O c c u r s和m a x O c c u r s屬性。當(dāng)接觸了模型組一段時(shí)間之后,將看到我們能同樣在那里應(yīng)用這
些屬性,以建立更多復(fù)雜的內(nèi)容模型。
(7) 模型組
一些其他的模式結(jié)構(gòu)允許建立定義塊和聲明塊。正如我們已經(jīng)看到的,可以在特殊的類(lèi)型
里擁有一個(gè)下面我們能夠給它命名的模型組。這個(gè)結(jié)構(gòu)使我們能夠建立復(fù)雜內(nèi)容模型,與此同
時(shí),我們能夠引用命名模型組去建立元素內(nèi)容模型一些部分,以通過(guò)將一個(gè)名字放入模型組再
利用類(lèi)型和元素聲明,而且允許我們?cè)趧e的地方引用它。這里是一些例子:
程序清單7 - 2 1
在這個(gè)模型里,每一個(gè)文檔將以A B序列開(kāi)始。這至少出現(xiàn)一次,或許兩次,我們能選擇C
或D,并做三至七次這種選擇。最后,我們將所有元素以任意的順序恢復(fù)過(guò)來(lái)。下面將是一個(gè)合
法的與這個(gè)內(nèi)容模型一致的文檔片段。
也可以將組套入組成復(fù)合內(nèi)容模型,例如:
程序清單7 - 2 2
第7章命名空間和模式使用215 下載
相應(yīng)地對(duì)于一些元素< f o o >的D T D內(nèi)容模型是:
現(xiàn)在考慮如果我們能通過(guò)名稱(chēng)查閱內(nèi)容模型組,怎樣能使用它們:
程序清單7 - 2 3
在下面的例子里,定義了一個(gè)內(nèi)容模型,然后將它合并到一個(gè)元素聲明里。連接這些結(jié)構(gòu)
使模式設(shè)計(jì)者靈活、有效地重用和指定詞匯表規(guī)范。
程序清單7 - 2 4
這是第一個(gè)例子的變體。我沒(méi)有在< e l e m e n t >里建立屬性聲明,而是創(chuàng)建了一個(gè)包含聲明的
屬性組,然后利用元素組和屬性組的規(guī)范創(chuàng)建元素聲明。這是使用屬性組的另一個(gè)方法。
程序清單7 - 2 5
216使用XML 高級(jí)編程
中國(guó)航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(78)