曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
過看看數(shù)據(jù)的分類將對(duì)這個(gè)問題有一個(gè)最好的解釋。
(3) 數(shù)據(jù)分類
S O A P吸取了最近的W 3 C工作草案—X M L模式的第二部分—來幫助傳送更多的將要處理
的數(shù)據(jù)消息。像你在第7章里所看到的,該草案提供了大量“內(nèi)建”的數(shù)據(jù)類型和一個(gè)可以附加
新類型的設(shè)計(jì)。S O A P使用這個(gè)特點(diǎn)加入了一些新的數(shù)據(jù)類型如變量和數(shù)組,很快我們將會(huì)提到。
使用S O A P以及在工作草案中定義的數(shù)據(jù)類型,結(jié)構(gòu)的最后設(shè)計(jì)可能會(huì)是以下形式:
程序清單11 - 7 3
這可能很像遠(yuǎn)程過程調(diào)用要轉(zhuǎn)換的X M L,但是它比起X M L - R P C的冗長(zhǎng)要優(yōu)良得多。
但結(jié)構(gòu)也伴隨一個(gè)問題,即可能沒有關(guān)于一個(gè)對(duì)象的名字或者參數(shù)的任何信息,或者名字
可能毫不相干。S O A P允許我們使用另外的縮寫,或聯(lián)想X M L - R P C技術(shù):
程序清單11 - 7 4
468使用XML 高級(jí)編程
下載
決定何時(shí)使用這個(gè)技術(shù)和何時(shí)使用類型屬性是非常直接的。絕大多數(shù)時(shí)間里你能用你喜歡
的一個(gè);對(duì)于S O A P規(guī)范,簡(jiǎn)單地說,只要某元素的名字不足以唯一指明數(shù)據(jù)類型,那么就使用
類型屬性,下面是浮點(diǎn)型的例子:
程序清單11 - 7 5
而這是一個(gè)簡(jiǎn)單的字符串:
程序清單11 - 7 6
盡管這兩個(gè)技術(shù)—對(duì)數(shù)據(jù)類型設(shè)置元素名字或者使用x s d:t y p e屬性——可達(dá)到同樣的目
的,但使用x s d:t y p e屬性的優(yōu)點(diǎn)在于我們能夠從解析器中得到正確的數(shù)據(jù)類型。例如,如果我
們要求解析器來讀< P u r c h a s e O r d e r>元素中的內(nèi)容,那么將得到一個(gè)時(shí)間和日期值,而不是一
個(gè)簡(jiǎn)單的字符串,當(dāng)然這需要X M L解析器建立所需元素的類型版本,像第7章討論的那樣。
(4) XML模式第二部分的擴(kuò)展
有效的元素值—例如字符串和整型—與在X M L模式第二部分工作草案中所列出的那些
相同: S O A P又加入了另一個(gè)—變量—來指明可能包含了許多數(shù)據(jù)類型的元素。盡管
M i c r o s o f t的Visual Basic廣泛使用了變量—并且VBScript 除了變量不用其他數(shù)據(jù)型式—但
S O A P的變量?jī)H對(duì)這樣一些數(shù)組有用,即這些數(shù)組可能包含了混合的值的類型。下面這個(gè)例子中
有一個(gè)兩維數(shù)組,其中元素0包含了一個(gè)整數(shù),而元素1包含一個(gè)字符串:
程序清單11 - 7 7
S O A P也將該草案加以擴(kuò)展,即加入了數(shù)組,事實(shí)上,它提供了用于編碼數(shù)組的兩種方法,
第一種方法需要將這些數(shù)組內(nèi)容的信息編碼成元素的名字,例如:
程序清單11 - 7 8
第11章服服務(wù)器到服務(wù)器使用469 下載
該例摘自于S O A P規(guī)范,但是在X M L模式第二部分的工作草案中沒有稱為i n t的數(shù)據(jù)類型,
S O A P數(shù)據(jù)類型均來自于該草案。這就意味著i n t類型將來自于自定義類型。S O A P標(biāo)準(zhǔn)并
沒有明確說明這些自定義類型消息如何被傳送,明白地講, S O A P消息包并沒有一個(gè)模式。
也就是說,每一個(gè)消息包里,該模式應(yīng)該被動(dòng)態(tài)創(chuàng)建,因?yàn)閿?shù)據(jù)類型可能是復(fù)雜的對(duì)象。
該元素的名字被設(shè)置為A r r a y O f,后面是數(shù)組里每一個(gè)元素的基本類型。該元素也有它的類
型屬性設(shè)置來指明該數(shù)組的大小,在該例中, u : i n t [ 4 ]意味著這是一個(gè)包含四個(gè)整型的數(shù)組。
第二種方法是使用一個(gè)已命名的元素指明一個(gè)數(shù)組:
程序清單11 - 7 9
這里,數(shù)組的每一個(gè)元素是一個(gè)作者。注意你選擇哪種技術(shù)并不取決于數(shù)組的內(nèi)容。下面
是一個(gè)合法的例子:
程序清單11 - 8 0
這里使用了A r r a y O f處理a u t h o r s,而不是整型( i n t e g e r s)。使用哪一種方法取決于你使用何
種形式將數(shù)組放在另外的消息的上下文之中,而這些消息都是正在傳送的。因?yàn)檫@也關(guān)系另外
的消息類型。
在結(jié)束對(duì)數(shù)組討論之前,我將舉兩個(gè)的例子,從中你能感受到S O A P超出X M L-R P C的靈活性。
下面是一個(gè)兩維字符串?dāng)?shù)組:
程序清單11 - 8 1
盡管數(shù)組里的所有元素相繼排列,但它們應(yīng)被解釋成2行,每行包括3列。一個(gè)這樣的兩維
數(shù)組與一個(gè)由數(shù)組組成的數(shù)組是不同的,后者可能為如下形式:
470使用XML 高級(jí)編程
下載
程序清單11 - 8 2
注意因?yàn)檫@兩個(gè)數(shù)組是分離的,故而大小不同也是合理的。
數(shù)組元素也能指出它們?cè)跀?shù)組中被安排的位置,在這個(gè)例子里,我們能向一個(gè)序列里插入
一個(gè)數(shù)組元素:
程序清單11 - 8 3
指定位置的能力能夠允許一個(gè)數(shù)組的某個(gè)部分被傳送,在這個(gè)例子里有另一個(gè)元素沒有發(fā)
送:
程序清單11 - 8 4
如果要指定一個(gè)連續(xù)的元素設(shè)置,這些元素開始于數(shù)組里的某一個(gè)位置,但是又不想指定
初始元素,那么可以指定一個(gè)偏移量,并從這里開始裝載這些元素:
程序清單11 - 8 5
如果覺得這里有些不對(duì),那么請(qǐng)不要忘記數(shù)組元素是從零開始計(jì)數(shù)的,偏移量也是如此。
(5) 其他的改進(jìn)
S O A P已經(jīng)解決了數(shù)據(jù)類型的問題,它已經(jīng)加入了更好的數(shù)組處理,并且現(xiàn)在允許X M L作為
X M L被傳送,而不是被處理成冗長(zhǎng)的結(jié)構(gòu)。還有另外的什么嗎?
好了,另一個(gè)加入到S O A P中的靈巧的特點(diǎn)是它允許一個(gè)值被許多地方所引用,傳送下面這
第11章服服務(wù)器到服務(wù)器使用471 下載
個(gè)數(shù)據(jù)結(jié)構(gòu)本質(zhì)上并沒有錯(cuò)誤:
程序清單11 - 8 6
你將發(fā)現(xiàn)如果有幾百個(gè)作家碰巧都住在B i r m i n g h a m,那將是一個(gè)多么龐大的消息。S O A P允
許一些被多次涉及的元素以如下形式出現(xiàn):
程序清單11 - 8 7
如果數(shù)據(jù)只能被一次引用則被稱作單一引用( s i n g l e-r e f e r e n c e),該情況下,任何數(shù)據(jù)沒有
一個(gè)i d屬性。多引用(m u l t i-r e f e r e n c e)技術(shù)是很有用的,例如,前面所出現(xiàn)的一些由數(shù)組組成
的數(shù)組可有如下表達(dá)方式:
程序清單11 - 8 8
472使用XML 高級(jí)編程
下載
注意這種多引用數(shù)組必須使用A r r a y O f語(yǔ)法,它們也必須在頂層。在S O A P標(biāo)準(zhǔn)里頂層元素
被稱作獨(dú)立元素;而包含于其他元素的元素被稱作嵌入元素。像使用X M L-R P C一樣,S O A P有
中國(guó)航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(146)