當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 河北O(jiān)A系統(tǒng) > 石家莊OA系統(tǒng) > 石家莊OA信息化
SOAP技術(shù)與B2B應(yīng)用集成--SOAP的型系統(tǒng)和數(shù)據(jù)編碼規(guī)則
SOAP技術(shù)與B2B應(yīng)用集成
--SOAP的型系統(tǒng)和數(shù)據(jù)編碼規(guī)則
柴曉路
Chief System Architect
2001年4月26日
本文延續(xù)前文SOAP的消息結(jié)構(gòu)與數(shù)據(jù)的組織方法,著重介紹了SOAP消息中基本基于XML
Schema的數(shù)據(jù)遍序方式,本部分的內(nèi)容比較抽象,如果讀者具備型系統(tǒng)或?qū)ο笙到y(tǒng)的理論知識可能能比較容易地理解,如果尚未學(xué)習(xí)過這方面的知識,可以接合后面一篇對各種具體類型的描述方法詳細(xì)介紹的文章一起理解會獲得更好的效果,本文僅包含術(shù)語部分和基本遍序規(guī)則部分。
SOAP的類型和數(shù)據(jù)的編碼是基于一個簡單類型系統(tǒng)的,這個簡單類型系統(tǒng)是基于程序語言、數(shù)據(jù)庫和半結(jié)構(gòu)數(shù)據(jù)中的類型系統(tǒng)的,是程序語言、數(shù)據(jù)庫和半結(jié)構(gòu)數(shù)據(jù)中類型系統(tǒng)的公共特性的一個泛化。在該簡單類型系統(tǒng)中,一個類型要么是一個簡單(可量化的)類型或是一個復(fù)合類型,這個復(fù)合類型由多個部分組成,每個部分是一個類型(包括簡單類型或復(fù)合類型)。在本文的后面會有類型的更為詳細(xì)的描述。SOAP定義了一個編序規(guī)則,用于可類型化對象的編序。它在兩個級別上操作,首先,給出一個符號上一致化的由該類型系統(tǒng)描述的模式,構(gòu)造一個XML語法層的模式(也就是型的描述),其次,提供一個類型系統(tǒng)的模式以及一個與該模式相一致的值的表示方法,構(gòu)造一個XML實例層的模式(也就是值的描述)。
在SOAP中定義的元素和屬性所用到的命名空間標(biāo)識是http://schemas.xmlsoap.org/soap/encoding/。
SOAP規(guī)范中描述的數(shù)據(jù)模型和編碼風(fēng)格的使用方式是被鼓勵的而不是必備的,其他的數(shù)據(jù)模型和編碼也是可以與SOAP聯(lián)合使用的,但在使用的時候必須使用完整的命名空間修飾以唯一標(biāo)識該編碼風(fēng)格。
XML提供了一種靈活性很高,具備良好可擴展性的數(shù)據(jù)編碼方式。SOAP規(guī)范只定義了非常有限的編碼規(guī)則,用戶可以按需要擴展該基本定義。本文在一個高層次上介紹了編碼規(guī)則的定義,而以后的文章則描述明確類型的編碼規(guī)則。
本文所引用的資源主要包括兩類,一類用于解決B2B電子商務(wù)應(yīng)用交互和集成的系列技術(shù)標(biāo)準(zhǔn)規(guī)范,他們與SOAP是一個不可分割的技術(shù)體系,包括UDDI、SOAP、WSDL、XML等,另一類是SOAP的開發(fā)軟件包,包括Microsoft的SOAP軟件包SOAPToolkit和Apache Project的SOAP Package。本文的最后給出了這些資源的鏈接,有興趣的讀者可以通過這些資源鏈接找到所需的內(nèi)容
術(shù)語定義
為了描述編碼,首先來介紹和定義一下以下需要使用的術(shù)語:
“value”值,是一個字符串(string)、一個可量度對象(數(shù)字、日期、玫舉)的名字、或是數(shù)個簡單值的組合。所有的值都有明確的類型。
“simple value”簡單值,是一個不可分的值,它不包含任意可以命名的部分。簡單值的例子可以是特定的字符串、證書或玫舉值等。
“compound value”復(fù)合值,是一個值的關(guān)系的聚集。復(fù)合值的例子可以是特定的采購定單、存貨報表、街道地址等。
在一個復(fù)合值中,每一個相關(guān)的值都可以用一個角色名來區(qū)分,也可以用一個序數(shù)來區(qū)分,當(dāng)然也可以同時使用兩者。這被稱為“accessor”存取標(biāo)識。復(fù)合值的例子包括特定的采購定單、存貨報表等。數(shù)組也是復(fù)合值。它可以被看成是具有多個相同名字的存取標(biāo)識(accessor)的復(fù)合值。
“array”數(shù)組,是一個復(fù)合值,在其成員值之間僅有順序位置不同。
“struct”結(jié)構(gòu),是一個復(fù)合值,在其成員值之間的區(qū)分是依靠存取標(biāo)識(accessor)。同時所有存取標(biāo)識的名應(yīng)各不相同。
“simple type”簡單類型,是簡單值的類型。簡單類型的例子包括那些類“string”, “integer”,玫舉類等。
“compound type”復(fù)合類型,是復(fù)合值的類型。復(fù)合類型的例子包括采購定單的抽象類型,這些由該類型派生的采購定單具備相同的存取標(biāo)識(shipTo, totalCost等),當(dāng)然他們有不同的值(也許對某些值還有約束)。
在一個復(fù)合類型中,一個存取標(biāo)識在本復(fù)合類型中是唯一的,如果它和其他復(fù)合類型中的某個存取標(biāo)識無法相區(qū)別,則該存取標(biāo)識名加上復(fù)合類型的名字才能成為唯一標(biāo)識,這個名稱為局部名。無論該名是直接或間接基于一個URI,如果該存取標(biāo)識不用加類型名約束就已經(jīng)是唯一的,那該名就稱為全局名。
對于值表的編序模式中所給出的信息,是有可能能決定一些值只能關(guān)聯(lián)一個存取標(biāo)識的簡單實例。對于其他可能的情況,則無法下這個斷言。一個值被稱為”single-reference”單引用,如果只有一個存取標(biāo)識能夠引用它。如果能被多個引用,無論是事實上還是潛在可能,那就是”multi-reference”多引用。注意有可能在一模式中有一個確定的值是單引用而其他則是多引用。關(guān)于單引用和多引用的簡單區(qū)別,在具體應(yīng)用時帶ID等屬性使之有可被重復(fù)引用的就是多引用,反之就是單引用。
在句法上,一個元素可以是獨立的或嵌入的。一個獨立的元素是作為編序中一個頂級元素出現(xiàn)。而其他則是嵌入元素。
編序規(guī)則
盡管使用usi:type屬性可以令值的表示可以是自描述的,也就是說即包含值的結(jié)構(gòu)也包含值的類型,但編序規(guī)則允許值的類型可以僅僅引用模式(Schema)中的類型定義。而這些模式可以使用“XML Schema Part 1: Structures”和“XML Schema Part 2: Datatypes”中定義的規(guī)范來描述,當(dāng)然也可以使用其他的模式定義來定義。注意盡管這樣,但許多模式定義只支持結(jié)構(gòu)(struct)和數(shù)組(array)類型,而編序規(guī)則則有可能要嘗試使用結(jié)構(gòu)(struct)和數(shù)組(array)類型之外的復(fù)合類型。
編序規(guī)則如下:
所有的值都應(yīng)當(dāng)表現(xiàn)為XML元素的內(nèi)容(content)。一個多引用的值必須被表示為一個獨立元素的內(nèi)容。
對每個包含一個值的元素,值的類型表示必須滿足以下至少一個條件:(a) 包含該值的元素實例包含一個xsi:type屬性(用于即時申明類型),(b) 包含該值的元素實例包含在一個具備SOAP-ENC: arrayType屬性的元素中(可能是default的),(c) 該元素的名帶有一個類型的明確關(guān)聯(lián),而該類型由一個模式來定義并決定。
一個簡單值應(yīng)被表示為字符數(shù)據(jù)(character data),也就是說,它沒有任何子元素。每一個簡單值必須有一個類型,該類型要么是在XML Schema規(guī)范的DataTypes部分中被羅列,要么它的元類型應(yīng)當(dāng)在該部分中被羅列。
一個復(fù)合值應(yīng)當(dāng)被編碼為一個元素序列,其中每一個存取標(biāo)識由一個嵌入元素來表示,他們的名是一一對應(yīng)的。若存取標(biāo)識的名在包含它的型中是局部的,則它有一個未修飾的元素名,而帶有全局名的存取標(biāo)識則應(yīng)有完全修飾的名。
一個多引用的簡單或復(fù)合值應(yīng)當(dāng)被編碼為一個獨立元素,該獨立元素應(yīng)包含一個局部的帶有非限制名的“id”屬性,該屬性的類型為XML規(guī)范中定義的ID類型。對其他對該同一值的所有存取標(biāo)識應(yīng)當(dāng)是一個空元素,該空元素有一個局部的未修飾的屬性“href”,該屬性類型是XML Schema規(guī)范中定義的“uri-reference”類型,“href”屬性的值是一個引用該對應(yīng)獨立元素的URI片段標(biāo)識。
字串和字節(jié)數(shù)組被表示為多引用簡單類型,不過特別的規(guī)則也允許它們在通常情況下更有效地表示。一個字串或字節(jié)數(shù)組的存取標(biāo)識可以有一個名為”id”的ID類型的屬性。如果這樣的話,所有其他對該同一值的存取標(biāo)識可以被編碼為一個空元素,該空元素應(yīng)包含一個局部的帶有非限制名的“href”屬性,該屬性的類型為XML Schema規(guī)范中定義的“uri-reference”類型,“href”屬性的值是一個引用該對應(yīng)獨立元素的URI片段標(biāo)識。
對一個值編碼多個引用是允許的,看上去這些引用好象是引用了多個不同的值,但事實上這些引用句柄引用的是同一值實體。
數(shù)組是復(fù)合值。SOAP數(shù)組被定義為類型是“SOAP-ENC:Array”或類型是源于“SOAP-ENC:Array”。
SOAP數(shù)組有一或多維,而它的成員由順序位置區(qū)分。一個數(shù)組的值被表示為一個能表示該數(shù)組的元素的序列,這些成員按序數(shù)從小到大順序出現(xiàn)。對于多維數(shù)組,則元素維按從右到左順序變化。每一個成員元素都被命名為一個獨立元素[參見編碼規(guī)則2]。
SOAP數(shù)組可以是單引用值,也可以是多引用值,從而可以被表示為一個嵌入元素或一個獨立元素。
SOAP數(shù)組必須包含一個“SOAP-ENC:arrayType”屬性,其中定義的包含元素的值的類型與維數(shù)一起描述了該數(shù)組?!盨OAP-ENC:arrayType”屬性的值定義如下:
arrayTypeValue = atype
asize
atype = QName *(
rank )
rank = "["
*( "," ) "]"
asize =
"[" #length "]"
length =
1*DIGIT
“atype”結(jié)構(gòu)是數(shù)組所包含的元素的類型的名,首先它包含一個QName表示,QName應(yīng)在XML Schema元素聲明中的“type”屬性中出現(xiàn),是一個預(yù)先定義好的類型名,QName是一個型約束(意味著所有其包含的元素都應(yīng)宣稱與該指明的類型相一致,也就是說,在SOAP-ENC:arrayType中引用的類型必須是所有數(shù)組元素的類型或元類型)。對于那些數(shù)組的數(shù)組或是“jagged arrays”,使用rank結(jié)構(gòu)來表示數(shù)組的元素是一個數(shù)組,同時該數(shù)組的具體類型將在下層具體成員數(shù)組的定義時進行實例化,rank中出現(xiàn)零個、一個到多個逗號,表明該成員變量是一維、二維或多維數(shù)組。對于多維數(shù)組,維數(shù)定義為一個由“,”分隔的維數(shù)序列,每個維數(shù)的計數(shù)基數(shù)為1(也就是說聲明為6,就是有6個元素,但從后面的定義我們會知道每個成員的引用則是0..5)。
“asize”結(jié)構(gòu)包含一個由逗號分隔的由零個、一個或多個整數(shù)組成的序列指明的數(shù)組的每個維的長度。一個由零個整數(shù)組成的序列表明對數(shù)組打下并沒有特別限制,不過具體的大小將由下層具體的成員來決定(例如“,,,”、“6,,6” “2,” “3,3”)。
例如,一個有5個成員的數(shù)組,每個成員的類型都為integer數(shù)組,但各個成員的數(shù)組長度可待定,那么它的arrayTypeValue的值就應(yīng)當(dāng)是 “int[][5]”。其中,atype的值是“int[]”,asize的值是“[5]”。類似地,一個有3個成員的數(shù)組,成員類型為integer二維數(shù)組,它的arrayTypeValue的值就應(yīng)當(dāng)是 “int[,][3]”。其中,atype的值是“int[,]”,asize的值是“[3]”。
SOAP數(shù)組成員可以包含一個“SOAP-ENC:offset”屬性來指明該成員在其裝載的數(shù)組中的偏移量。這也可以用于指明在一個部分描述的數(shù)組中成員的偏移。類似的,SOAP數(shù)組成員可以包含一個“SOAP-ENC:position”屬性來指明該成員在其裝載的數(shù)組中的位置。這也可以用于指明在一個稀疏描述的數(shù)組中成員的位置。“SOAP-ENC:offset”和“SOAP-ENC:position”屬性的值定義為:
arrayPoint = "[" #length "]"
他們的基數(shù)都是0。
NULL值和默認(rèn)值可以在存取標(biāo)識元素中省略(依賴于模式Schema中的定義,或者其他等價的方法)。NULL值可以在一個存取標(biāo)識元素中使用一個值為1的屬性xsi:null來指明,或者可以是其他依賴于應(yīng)用程序的屬性和值。
結(jié)語
本文介紹了SOAP消息中的型系統(tǒng)和值/類型的基本遍序規(guī)則。我將在下一篇文章中詳細(xì)SOAP消息中各種具體類型的定義描述方法和值表示方式。
參考資料
- 解決B2B電子商務(wù)應(yīng)用交互和集成的InterOP Stack系列技術(shù)標(biāo)準(zhǔn)規(guī)范
-
- UDDI
Technical White Paper, Ariba Inc., IBM Corporation and Microsoft
Corporation, 6 Sep 2000
- Web
Service Description Language (WSDL) 1.0, IBM, 25 Sep 2000
- SOAP:
Simple Object Access Protocol Specification 1.1, IBM, Microsoft,
DevelopMentor, 2000
- Extensible Markup Language (XML)
1.0 (Second Edition), W3C, 6 Oct 2000
- XML Schema Part 0:
Primer, W3C, 16 Apr 2001
- XML Schema Part 1:
Structures, W3C, 16 Apr 2001
- XML Schema Part 2: Datatypes, W3C, 16 Apr 2001
- UDDI
Technical White Paper, Ariba Inc., IBM Corporation and Microsoft
Corporation, 6 Sep 2000
- SOAP開發(fā)軟件包
-
- Microsoft
SOAP Toolkit 2.0, RC0, Microsoft Corporation
- Apache SOAP 2.0, Apache.ORG
- Microsoft
SOAP Toolkit 2.0, RC0, Microsoft Corporation
作者簡介
柴曉路:上海得易電子商務(wù)技術(shù)有限公司首席系統(tǒng)架構(gòu)師、XML技術(shù)顧問。2000年獲復(fù)旦大學(xué)計算機科學(xué)碩士學(xué)位,曾在國際計算機科學(xué)學(xué)術(shù)會議(ICSC)、中國XML技術(shù)研討會(北京)、計算機科學(xué)期刊等各類國際、國內(nèi)重要會議與期刊上發(fā)表論文多篇。其專長為 XML與數(shù)據(jù)交換、數(shù)據(jù)庫、面向?qū)ο蠹夹g(shù)等。
- 1InterOP Stack新一代平臺互操作技術(shù):InterOP Stack技術(shù)應(yīng)用前瞻
- 2面向21世紀(jì)的知識發(fā)展戰(zhàn)略
- 3微軟為創(chuàng)建和使用Web服務(wù)另辟蹊徑
- 4Web服務(wù)設(shè)計師,第5部分:基于付費Web服務(wù)的障礙
- 5[原創(chuàng)]母子公司間的知識管控模式探討
- 6低價是IT產(chǎn)品過冬的法寶嗎?
- 7.NET的數(shù)據(jù)傳輸之道
- 8架構(gòu)Web Service:基于Web服務(wù)的應(yīng)用、解決方案和開發(fā)平臺
- 9Web Services. Part I: The Basics
- 10將Web服務(wù)用于電子交易的單點登錄
- 11拐點之年:中國管理軟件行業(yè)2008大盤點
- 12石家莊OA信息化的基本XML和RDF技術(shù)(二):將文件合并到RDF模型和基本的RDF查詢
- 13BEA和Palm合作掌上電腦Web服務(wù)
- 14架構(gòu)Web Service:交互界面,Web服務(wù)定義的核心
- 15SOAP與RDF--超越遠(yuǎn)程過程調(diào)用
- 16關(guān)于日本的石家莊OA信息化
- 17微軟等籌備Web服務(wù)盛會 Sun再遭冷遇
- 18泛普軟件石家莊OA信息化系統(tǒng)集成方案
- 19什么是真正的石家莊OA信息化
- 20Licensee Requirements from Dev, Test, and Ops
- 21WebLogic Workshop給非開發(fā)人員帶來Web服務(wù)
- 22泛普軟件如何實現(xiàn)知識庫雙機熱備
- 23一波“三折”:我的OA選型經(jīng)歷(下)
- 24泛普軟件石家莊OA信息化系統(tǒng)技術(shù)架構(gòu)
- 25石家莊OA信息化的基本XML和RDF 技術(shù)(五):定義RDF和DAML+OIL圖示
- 26石家莊OA信息化的價值和挑戰(zhàn)
- 27不僅看投資回報,還要看“知識回報”
- 28分析家:安全仍是Web服務(wù)普及最大障礙
- 29“低價狂人”欒潤峰:有理想的冒險才值得
- 30關(guān)于資料收集的一些心得(by AMT 羅贊)
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
版權(quán)所有:泛普軟件 渝ICP備14008431號-2 渝公網(wǎng)安備50011202501700號 咨詢電話:400-8352-114