SOAP協議規範(二)
5.2 簡單型別
SOAP採用了"XML Schema Part 2: Datatypes"規範[11]"Built-in datatypes"節中的所有型別作為簡單型別,包括值和取值範圍。例如:
型別 舉例
int 58502
float 314159265358979E+1
negativeInteger -32768
string Louis "Satchmo" Armstrong
在xml schema規範中宣告的資料型別可以直接用在元素schema中,也可以使用從這些型別衍生的新型別。一個schema和對應的具有這些型別的元素的資料例項的例子如下所示:
所有簡單值必須編碼為元素的內容,它的型別或者在"xml schema part 2: datatypes"規範[11]中定義過,或者是基於一個用xml schema規範提供的機制能推衍生出的型別。如果一個簡單值編碼為獨立元素或異質陣列成員,那麼有一個對應於資料型別的元素宣告將會很方便。因為"xml schema part 2: datatypes"規範[11]包括了型別定義,但是不包括對應的元素宣告,soap-enc schema和名域為每個簡單資料型別宣告瞭一個元素,如
5.2.1 字串
字串資料型別的定義在"XML Schema Part 2: Datatypes"規範[11]中。注意,這不同於許多資料庫和程式語言中的"string"型別,特別的,字串資料型別可能禁止某些在那些語言中允許的字元。(這些值必須用xsd:string之外的資料型別表示)一個字串可能編碼為一個single-reference 或 multi-reference值。包含字串值的元素可能有一個"id"屬性。附加的accessor元素可能有對應的"href"屬性。
例如,同一字串的兩個accessor可能以如下形式出現:
但是,如果兩個accessor參考同一字串例項(或字串的子型別),這不是一個實質問題,它們可以編碼為兩個single-reference值,如下所示:
這個例子的schema片斷如下所示:
在這個例子中,soap-enc:string型別用作元素的型別,這是宣告資料型別是"xsd:string"且允許"id" 和"href"屬性的元素的簡便方法。精確定義參見soap編碼schema。schemas可以使用這些源自soap編碼schema的宣告,但也可以不這樣做。
5.2.2 enumerations
"XML Schema Part 2: Datatypes"規範 [11] 定義了"enumeration."機制。SOAP資料模型直接採用了這種機制。但是,由於程式語言和其它語言在定義列舉時通常有些不同,所以我們在這裡詳細闡述了它的概念並描述了一個列表成員的可能取的值是如何編碼的。"Enumeration"作為一個概念表示不同的名字的集合。一個特定的列舉就是對應於特定的基型別的不同的值的列表。例如,顏色集合("Green", "Blue", "Brown")可以定義為基於字串型別的列舉,("1", "3", "5")可能是一個基於整型數的列舉,等等。"XML Schema Part 2: Datatypes" [11]支援除了布林型以外所有簡單型別的列舉。"XML Schema Part 1: Structures"規範[10]的語言可以用來定義列舉型別。如果schema由另一個沒有特定基型別適用的符號系統生成,就使用"string"。在下面schema的例子中,"EyeColor"定義為字串,可能的值是"Green", "Blue", 或"Brown"的列舉,資料例項按照schema顯示如下。
5.2.3 字元陣列
一個字元陣列可能編碼為single-reference 或multi-reference值。字元陣列的編碼規則與字串的編碼規則類似。特別的,包含字元陣列的元素值可能由一個"id"屬性,附加的accssor元素可能有相應的"href"屬性。推薦使用定義在XML Schemas [10][11]中的'base64'編碼(使用在2045 [13]中定義的base64編碼演算法)表示模糊字元陣列。不過,由於行長度(line length)的限制,通常在MIME中應用base64編碼,SOAP中一般不應用base64編碼。但是提供了"SOAP-ENC:base64"子型別使之能用於SOAP。
5.3 多型accessor
許多語言允許能夠多型訪問多種型別值的accessor,每種型別在執行時可用。一個多型accessor例項必須包含一個"xsi:type"屬性描述實際值的型別。例如,一個名為"cost"型別值為"xsd:float"的多型accessor編碼如下:
5.4 compound types複合型別
SOAP定義了與下列常在程式語言中出現的結構性模式對應的型別:
結構:一個"struct"是一個複合值,它的成員值的唯一區別是accessor名稱,任意兩個accessor名稱都不相同。
陣列:一個"array"是一個複合值,它的成員值的唯一區別是序數位置。
SOAP也允許結構和陣列之外的其它資料的序列化,例如Directed-Labeled-Graph Data Model之類的資料中,單個節點有許多不同的accssor,有些不止出現一次。SOAP序列化規則不要求底層的資料模型在accssor之間區分次序,但如果有這樣的次序的話,這些accssor必須按照這個順序編碼。
5.4.1 複合值,結構和值引用
複合值的成員編碼為accessor元素。當accessor由名區分時(如結構),accessor名即作為元素名。名區域性於型別的accessor有不受限的名,其它的accessor則有受限的名。下面的例子是型別為"Book"的結構:
以下是描述上面結構的schema片斷:
以下是一個同時具有簡單和複雜成員型別的例子。它顯示兩層引用。注意"author"accssor元素的"href"屬性是對相應具有"id"屬性的值的引用。"address"與之類似。
當"person"的值和"address"的值是multi-reference時,上面的形式是正確的。如果它
們是single-reference,就必須用嵌入的形式,如下所示:
如果新增一個限制,任意兩個人都不會有相同的地址,並且地址可以是街道或email地址,一本書可以有兩個作者,編碼如下:
序列化可以包含對不在同一個資源的值的引用:
以下是描述上面結構的schema片斷:
<!-- Either the following group must occur or else the
href attribute must appear, but not both. -->
<!-- Either the following group must occur or else the
href attribute must appear, but not both. -->
<!-- Either the following group must occur or else the
href attribute must appear, but not both. -->
5.4.2 陣列
SOAP陣列定義為具有"SOAP-ENC:Array"型別或一個從"SOAP-ENC:Array"衍生的型別(參見規則8)。陣列表示為元素值,對元素的名沒有特別的約束(正如元素值並不約束它們所屬的元素)。陣列可以包含任意型別的元素,包括巢狀陣列。可以建立新的型別(受SOAP-ENC:Array
型別限制)來表示陣列,如整數陣列或某些使用者定義的列舉。陣列值表示為組成這個陣列的項的元素的規則序列。在陣列值中,元素名對於區分accesor並不重要。元素可以有任意的名。實際上,元素常常用它們在schema中暗示或確定的陣列型別來命名元素。並且一般情況下對於複合值來說,如果陣列中陣列項的值是single-reference值,則這個陣列項包含它的值,否則,該陣列項通過"href"屬性引用這個值。下面的例子是一個整型陣列的schema片斷:
在這個例子中,陣列"myfavoritenumbers"包括幾個成員,每個成員是一個型別為soap-enc:int的值。注意soap-enc:array允許不受限制的元素名,它們不傳達任何型別資訊,所以在使用時,或者它們有xsi:type屬性,或者它們所屬的元素有soap-enc:arraytype屬性。自然,由soap-enc:array衍生的型別可以宣告區域性元素,但這種情況下要包括型別資訊。上面已經提到,soap-enc schema包含了元素的宣告,元素名與"xml schema part 2: datatypes"規範[11]中的簡單型別一致。其中包括了對"array"的宣告。於是,我們可以這樣寫:
陣列可以包含特定arraytype的任意子型別的例項。即,陣列成員可以是arrytype屬性值指定的型別的任意子型別,這個型別對於arraytype屬性中指定的型別來說是可替換的(根據schema中的替換規則)。例如,一個整型陣列可以包含從整型衍生的任意型別(如"int"或任意使用者定義的從整型衍生的型別)。同樣,一個"address"陣列可能包含一個address的受限型別或擴充套件型別如"internationaladdress"。因為提供的soap-enc:array型別允許任意型別的成員,所以可以包含任意型別的混合除非使用arraytype屬性加以特別的限制。在例項中,可以使用xsi:type指定成員元素的型別,或通過schema中成員元素的宣告來指定。下面是兩個例子。
Of Mans First Disobedience, and the Fruit
Of that Forbidden Tree, whose mortal tast
Brought Death into the World, and all our woe,
Of Mans First Disobedience, and the Fruit
Of that Forbidden Tree, whose mortal tast
Brought Death into the World, and all our woe,
陣列值可以是結構或其它複合值。例如"xyz:order"結構陣列:
陣列成員值也可以是陣列。下例是兩個字串陣列組成的陣列:
包含陣列的元素無需命名為"soap-enc:array"。它可以有任意的名,只要元素的型別是soap-enc:array或由之衍生的型別。例如,下面是一個schema片斷和與之一致的陣列例項。
陣列可能是多維的。在這種情況下,在arraytype屬性的asize部分將不止有一個值:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-756793/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SOAP協議規範(一)協議
- Mqtt協議規範MQQT協議
- 網路協議規範大全協議
- 瞭解下SOAP HTTP 協議HTTP協議
- 用Python寫協議規範Python協議
- soap協議的web服務協議Web
- TELNET協議規範(中文版) (轉)協議
- Http get,post,soap協議的區別HTTP協議
- onvif soap 協議的錯誤程式碼協議
- POP3協議規範(中文版) (轉)協議
- 【譯】 WebSocket 協議第十二章——使用其他規範中的WebSocket協議Web協議
- Ajax通過SOAP協議呼叫Web服務協議Web
- SOAP協議棧是令人尷尬的失敗?協議
- HTTP和SOAP完全就是兩個不同的協議HTTP協議
- 前端規範與思考(二)———css規範前端CSS
- MQTT協議(二)MQQT協議
- 二進位制協議 VS 文字協議協議
- HTML編碼規範建議HTML
- 作者:Don Box 簡單物件訪問協議(SOAP)初級指南 (轉)物件協議
- 小知識二、Then協議協議
- Neuron 2.1.0 釋出:支援 Sparkplug B 規範,更完善的工業協議支援Spark協議
- apache cxf-2.4.3 +spring-3.0.5釋出SOAP協議WebService服務ApacheSpring協議Web
- 申論規範表達二
- 雲協議範例一 P2P協議
- 前端開發規範:命名規範、html規範、css規範、js規範前端HTMLCSSJS
- keystone系列二:HTTP協議HTTP協議
- 網路協議體系(二)協議
- 深入 Git 和開發規範(二)Git
- 前端工程程式碼規範(二)——HTML前端HTML
- 安全規範和指南系列之二
- MySQL 高效能優化規範建議MySql優化
- CSS編寫指導規範和建議CSS
- 【網路協議】IP協議、ARP協議、RARP協議協議
- MySQL資料庫規範 (設計規範+開發規範+操作規範)MySql資料庫
- (1) Mysql高效能優化規範建議MySql優化
- 泛議網路表單可用性規範
- 前端規範之javascript規範前端JavaScript
- 前端規範之CSS規範前端CSS