收藏 分销(赏)

SOAP标准规范专业资料.doc

上传人:天**** 文档编号:2609430 上传时间:2024-06-03 格式:DOC 页数:107 大小:96.04KB 下载积分:18 金币
下载 相关 举报
SOAP标准规范专业资料.doc_第1页
第1页 / 共107页
SOAP标准规范专业资料.doc_第2页
第2页 / 共107页


点击查看更多>>
资源描述
SOAP:简朴对象访问合同 (-1-1) 摘要 SOAP是用在分散或分布环境中互换信息简朴合同,它是一种基于XML合同,涉及三 个某些:封装定义了一种描述消息中包括什么内容以及如何解决它们框架,编码规则用于 表达应用程序定义数据类型实例,此外尚有一种表达远程过程调用和应答协定。SOAP 被设计为可以与各种其他合同结合使用;但这篇文章仅描述如何将SOAP和HTTP及HTTP扩展 框架相结合。 目录 1. 简介 1.1 设计目的 1.2 符号协定 1.3 SOAP消息举例 2. SOAP消息互换模型 3. 与XML关系 4. SOAP封装 4.1.1 SOAP encodingStyle属性 4.1.2 封装版本模型 4.2 SOAP头 4.2.1 使用SOAP头属性 4.2.2 SOAP actor属性 4.2.3 SOAP mustUnderstand属性 4.3 SOAP体 4.3.1 SOAP头和体关系 4.4 SOAP 错误 4.4.1 SOAP错误代码 5. SOAP编码 5.1 XML编码类型规则 5.2 简朴类型 5.2.1 字符串 5.2.2 枚举 5.2.3 字符数组 5.3 多态 Accessor 5.4 复合类型 5.4.1 复合值和对值引用 5.4.2 数组 5.4.2.1 PartiallyTransmitted Arrays 5.4.2.2 稀疏数组 5.4.3 普通复合类型 5.5 缺省值 5.6 SOAP root属性 6. 在HTTP中使用SOAP 6.1 SOAP HTTP祈求 6.1.1 HTTP头中SOAPAction域 6.2 SOAP HTTP应答 6.3 HTTP扩展框架 6.4 SOAP HTTP举例 7. 用SOAP表达RPC 7.1 RPC和SOAP体 7.2 RPC和SOAP头 8. 安全考虑 9. 参照文献 A. SOAP封装举例 A.1 祈求编码举例 A.2 应答编码举例 1. 简介 SOAP以XML形式提供了一种简朴、轻量用于在分散或分布环境中互换构造化和类型化信息 机制。SOAP自身并没有定义任何应用程序语义,如编程模型或特定语义实现;事实上它 通过提供一种有原则组件包模型和在模块中编码数据机制,定义了一种简朴表达应用 程序语义机制。这使SOAP可以被用于从消息传递到RPC各种系统。 SOAP涉及三个某些 SOAP封装(见第4节)构造定义了一种整体框架用来表达消息中包括什么内容,谁来解决这 些内容以及这些内容是可选或是必须。 SOAP编码规则(见第5节)定义了用以互换应用程序定义数据类型实例一系列机制。 SOAP RPC表达(见第7节)定义了一种用来表达远程过程调用和应答协定。 虽然这三个某些都作为SOAP一某些一起描述,但它们在功能上是相交。特别,封装和 编码规则是在不同名域中定义,这种模块性定义办法增长了简朴性。 在SOAP封装,SOAP编码规则和SOAP RPC协定之外,这个规范还定义了两个合同绑定,描 述了在有或没有HTTP扩展框架[6]状况下,SOAP消息如何包括在HTTP消息[5]中被传送。  1.1 设计目的 SOAP重要设计目的是简朴性和可扩展性,这意味着老式消息系统和分布对象系统某些 性质不是SOAP规范一某些。这些性质涉及: 分布式碎片收集 成批传送消息 对象引用(规定分布式碎片收集) 激活机制(规定对象引用) 1.2 符号商定 这篇文章中核心字 "MUST","MUST NOT","REQUIRED","SHALL","SHALL NOT",  "SHOULD","SHOULD NOT","RECOMMENDED","MAY",和"OPTIONAL"解释在RFC-2119 [2]中。 这篇文章中用到名域前缀 "SOAP-ENV" 和 "SOAP-ENC"分别与 ""和 ""关联。 整篇文档中,名域前缀“xsi”被假定为与URI "Schema规范[11]定义)相连。 类似,名域前缀”xsd“被假定为与URI "" (在 [10]中定义)相连。名域前缀”tns“用来表达任意名域。所有其他名域前缀都只是 例子。 名域URI基本形式”some-URI“表达某些依赖于应用程序或上下文URI[4]。 这个规范用扩展BNF(在RFC-2616[5] 描述)描述某些构造。 1.3 SOAP消息举例 在这个例子中,GetLastTradePrice SOAP 祈求被发往 StockQuote服务。这个祈求携 带一种字符串参数和ticker符号,在SOAP应答中返回一种浮点数。XML名域用来区别SOAP 标志符和应用程序特定标志符。这个例子阐明了在第6节中定义HTTP绑定。如果SOAP中 管理XML负载规则完全独立于HTTP是没故意义,由于事实上该负载是由HTTP携带。 在Appendix A中有更多例子。 例1 在HTTP祈求中嵌入SOAP消息 POST /StockQuote HTTP/1.1 Host: Content-Type:text/xml; charset="utf-8" Content-Length:nnnn SOAPAction: "Some-URI" <SOAP-ENV:Envelope xmlns:SOAP-ENV="" SOAP-ENV:encodingStyle=""> <SOAP-ENV:Body> <m:GetLastTradePrice xmlns:m="Some-URI"> <symbol>DIS</symbol> </m:GetLastTradePrice> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 下面是一条应答消息,涉及HTTP消息,SOAP消息是其详细内容: 例2 在HTTP应答中嵌入SOAP消息 HTTP/1.1 200 OK Content-Type:text/xml; charset="utf-8" Content-Length: nnnn <SOAP-ENV:Envelope xmlns:SOAP-ENV="" SOAP-ENV:encodingStyle=""/> <SOAP-ENV:Body> <m:GetLastTradePriceResponse xmlns:m="Some-URI"> <Price>34.5</Price> </m:GetLastTradePriceResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 2. SOAP消息互换模型 SOAP消息从发送方到接受方是单向传送,但正如上面显示,SOAP消息经常以祈求/应答 方式实现。 SOAP实现可以通过开发特定网络系统特性来优化。例如,HTTP绑定(见第6节)使SOAP 应答消息以HTTP应答方式传播,并使用同一种连接返回祈求。 不论SOAP被绑定到哪个合同,SOAP消息采用所谓”消息途径“发送,这使在终节点之外 中间节点可以解决消息。 一种接受SOAP消息SOAP应用程序必要按顺序执行如下动作来解决消息: 辨认应用程序想要SOAP消息所有某些 (见4.2.2节) 检查应用程序与否支持第一步中辨认消息中所有必须某些并解决它。如果不支持,则丢弃 消息(见4.4节)。在不影响解决成果状况下,解决器也许忽视第一步中辨认出可选某些。 如果这个SOAP应用程序不是这个消息最后目地,则在转发消息之前删除第一步中辨认出 来所有某些。 为了对的解决一条消息或者消息一某些,SOAP解决器需要理解:所用互换方式(单向, 祈求/应答,多路发送等等),这种方式下接受者任务,RPC机制(如果有话)使用 (如第7节中所述),数据体现办法或编码,尚有其他必须语义。 尽管属性例如SOAP encodingstyle(见4.1.1节)可以用于描述一种消息某些方面,但 这个规范并不强制所有接受方也必要有同样属性并取同样属性值。举个例子,某一特 定应用也许懂得一种元素表达一条遵循第7节商定RPC祈求,但是此外某些应用也许以为 指向该元素所有消息都用单向传播,而不是类似第7节祈求应答模式。 (译者注:交互双方SOAP消息并不一定要遵循同样格式设定,而只需要以一种双方可理 解格式互换信息就可以了) 3. 与XML关系 所有SOAP消息都使用XML形式编码(更多关于XML信息请见[7]) 一种SOAP应用程序产生消息中,所有由SOAP定义元素和属性中必要涉及对的名域。 SOAP应用程序必要可以解决它接受到消息中SOAP名域(见4.4节),并且它可以解决没 有SOAP名域SOAP消息,就象它们有对的名域同样。 SOAP定义了两个名域(更多关于XML名域信息请见[8]) SOAP封装名域标志符是"" SOAP编码规则名域标志符是"" SOAP消息中不能包括文档类型声明,也不能涉及消息解决指令。[7] SOAP使用"ID"类型"id"属性来指定一种元素唯一标志符,同步该属性是局部和无需 校验。SOAP使用"uri-reference"类型"href"属性指定对这个值引用,同步该属性 是局部和无需校验。这样就遵从了XML规范[7],XML Schema规范[11]和XML连接语言 规范[9]风格。 除了SOAP mustUnderstand 属性(见4.2.3节)和SOAP actor属性(见4.2.2节)之外,普通容许属性和它们值出当前XML文档实例或Schema中(两者效果相似)。也就是说,在DTD或Schema中声明一种缺省值或固定值和在XML文档实例中设立它值在语义上相似。 4. SOAP封装 SOAP消息是一种XML文档,涉及一种必须SOAP封装,一种可选SOAP头和一种必须 SOAP体。在这篇规范剩余某些中,提到SOAP消息时就是指这个XML文档。这一节中定义 元素和属性名域标志符为:""。 一种SOAP消息涉及如下某些: 在表达这个消息XML文档中,封装是顶层元素。 应用SOAP互换信息各方是分散且没有预先协定,SOAP头提供了向SOAP消息中添加关于 这条SOAP消息某些要素(feature)机制。SOAP定义了少量属性用来表白这项要素 (feature)与否可选以及由谁来解决。(见4.2节) SOAP体是包括消息最后接受者想要信息容器(见4.3节)。SOAP为SOAP体定义了一 个Fault元素用来报告错误信息。 语法规则如下所示: 封装 元素名是 "Envelope" 在SOAP消息中必要浮现。 可以包括名域声明和附加属性。如果包括附加属性,这些属性必要限定名域。类似, "Envelope"可以包括附加子元素,这些也必要限定名域且跟在SOAP体元素之后。 SOAP头 (见4.2节) 元素名是"Header" 在SOAP消息中也许浮现。如果浮现话,必要是SOAP 封装元素第一种直接子元素。 SOAP头可以包括各种条目,每个都是SOAP头元素直接子元素。所有SOAP头直接子元素 都必要限定名域。 SOAP体 (见4.3节) 元素名是"Body" 在SOAP消息中必要浮现且必要是SOAP封装元素直接子元素。它必要直接跟在SOAP头元素 (如果有话)之后。否则它必要是SOAP封装元素第一种直接子元素。 SOAP体可以涉及各种条目,每个条目必要是SOAP体元素直接子元素。SOAP体元素直接 子元素可以限定名域。SOAP定义了SOAP Fault元素来表达错误信息。(见4.4节). 4.1.1 SOAP encodingStyle 属性 EncodingStyle全局属性用来表达SOAP消息序列化规则。这个属性可以在任何元素中出 现,作用范畴与名域声明作用范畴很相似,为这个元素内容和它所有无重载此属性 子元素。SOAP消息没有定义缺省编码。 属性值是一种或各种URI顺序列表,每个URI拟定了一种或各种序列化规则,用来不同程 度反序列化SOAP消息,举例如下: "" "" "" 第5节中定义序列化规则由URI""确 定。使用这个特定序列化规则消息应当用encodingStyle属性阐明这一点。此外,所有 以""开头URI中序列化规则与 第5节中定义SOAP编码规则相一致。 一种零长度URI("")明确显示所含元素没有任何编码形式。这可以用来取消上一级元素 所有编码声明。 4.1.2 封装版本模型 SOAP没有定义常规基于主版本号和辅版本号版本形式。SOAP消息必要有一种封装元素 与名域""VersionMismatch 错误 信息(见4.4节)。 4.2 SOAP头 SOAP为互相通信团队之间提供了一种很灵活机制:在不必预先协定状况下,以分散 但原则方式扩展消息。可以在SOAP头中添加条目实现这种扩展,典型例子有认证,事务 管理,支付等等。 头元素编码为SOAP封装元素第一种直接子元素。头元素所有直接子元素称作条目。 条目编码规则如下: 一种条目有它完整元素名(涉及名域URI和局部名)拟定。SOAP头直接子元素必要有 名域限制。 SOAP encodingStyle属性可以用来批示条目所用编码形式(见4.1.1节) SOAP mustUnderstand属性(见4.2.3节)和SOAP actor属性(见4.2.2节)可以用来 批示如何解决这个条目以及由谁来解决。(见4.2.1节) 4.2.1 使用头属性 这一节中定义SOAP头属性拟定了SOAP消息接受者应当如何按第2节中所述方式解决消 息。产生SOAP消息SOAP应用程序,应当仅仅在SOAP头元素直接子元素中使用这些SOAP 头属性。SOAP消息接受者必要忽视所有不在SOAP头元素直接子元素中SOAP头属性。 下面例子是一种SOAP头,涉及一种元素标志符"Transaction","mustUnderstand"取 值为"1"和数值5。这应当以如下方式编码: <SOAP-ENV:Header> <t:Transaction xmlns:t="some-URI" SOAP-ENV:mustUnderstand="1"> 5 </t:Transaction> </SOAP-ENV:Header> 4.2.2 SOAP actor属性 一种SOAP消息从始节点到终节点过程中,也许沿着消息途径通过一系列SOAP中间节点。 一种SOAP中间节点是一种可以接受转发SOAP消息应用程序。中间节点和终节点由URI区 分。 也许SOAP消息终节点并不需要所有某些,而在消息途径上一种和几种中间节点也许需要 这些内容。头元素接受者扮演角色类似于一种过滤器,防止这些只发给本接受者消息 某些扩散到其他节点。即一种头元素接受者必要不转发这些头元素到SOAP消息途径上下 一种应用程序。同样,接受者也许插入一种相似头元素。 SOAP actor全局属性可以用于批示头元素接受者。SOAP actor属性值是一种URI。 URI "" 省略SOAP actor属性表达接受者是SOAP消息终节点。 如果这个属性要生效,它必要出当前SOAP消息实例中。(见第3节和4.2.1节) 4.2.3 SOAP mustUnderstand属性 SOAP mustUnderstand全局属性用来批示接受者在解决消息时这个条目与否必要解决。条 目接受者由SOAP actor属性定义(见4.2.2节)。MustUnderstand属性值是"1" 或 "0"。缺少SOAP mustUnderstand属性在语义上等同于它值为"0"。 如果一种头元素SOAP mustUnderstand属性值是"1",那么条目接受者必要或者遵守 语义(如以元素全名传送)并按照语义对的解决,或者放弃解决消息(见4.4节)。 SOAP mustUnderstand 属性考虑了消息演变精确性(robust evolution)。必要假 定包括SOAP mustUnderstand属性且值为"1"元素以某种方式修改了它们父元素或同 层元素语义。以这种方式连接元素保证了语义上变化不会被那些不能完全理解它接受 者忽视。 如果这个属性要生效,它必要出当前SOAP消息实例中。(见第3节和4.2.1节) 4.3 SOAP体 SOAP体元素提供了一种简朴机制,使消息最后接受者能互换必要信息。使用体元素 典型状况涉及配备RPC祈求和错误报告。 体元素编码为SOAP封装元素直接子元素。如果已有一种头元素,那么体元素必要紧跟在 头元素之后,否则它必要是SOAP封装元素第一种直接子元素。 体元素所有直接子元素称作体条目,每个体条目在SOAP体元素中编码为一种独立元素。 条目编码规则如下: 一种条目由它元素全名(涉及名域URI和局部名)拟定。SOAP体元素直接子元素也许是 名域限制。 SOAP encodingStyle属性也许用来批示条目(见4.1.1节)编码方式。 SOAP定义了一种Fault条目用来报告错误信息。(见4.4节) 4.3.1 SOAP头和体关系 虽然头和体定义为独立元素,它们事实上是关于系。体条目和头条目关系如下:体条 目在语义上等同于actor属性为缺省值且mustUnderstand属性值为"1"头条目。不使用 actor属性则表达缺省actor。(见4.2.2节) 4.4 SOAP错误 SOAP错误元素用于在SOAP消息中携带错误和(或)状态信息。如果有SOAP错误元素,它必 须以以体条目方式浮现,并且在一种体元素中最多余现一次。 SOAP错误元素定义了如下四个子元素: faultcode faultcode元素给软件提供了一种辨认此错误算法机制。SOAP错误元素必要有 faultcode子元素,并且它值必要是一种合法名(在[8]节定义)。SOAP定义某些 SOAP faultcode描述基本SOAP错误(见4.4.1节)。 faultstring faultstring元素提供了一种错误解释,而不是为了软件解决。faultstring元素类似于 HTTP中定义(见[5],第6.1节)'Reason-Phrase'。SOAP错误元素必要有 faultstring子元素,并且它应当提供某些错误本质解释信息。 faultactor faultactor元素提供了在消息途径上是谁导致了错误发生信息(见第2节)。它类似于 SOAP actor属性(见4.2.2节),只是SOAP actor指是头条目目地, faultactor指是错误来源。faultactor属性值是用来区别错误来源URI。 不是SOAP消息最后目地应用程序必要在SOAP Fault元素中包括faultactor元素。 消息最后目地可以使用faultactor元素明确批示是它产生了这个错误(参见下面 detail元素) detail detail元素用来携带与Body元素关于应用程序所要错误信息。如果Body元素内容不 能被成功解决,则必要包括detail子元素。它不能用来携带属于头条目错误信息。 头条目详细出错信息必要由头条目携带。 Fault元素中没有detail元素表达这个错误与Body元素解决无关。在有错误时候,这可 以用来区别Body元素有无被对的解决。 detail元素所有直接子元素称作detail条目,并且每个detail条目在detail元素中编 码为独立元素。 detail条目编码规则如下(参见例10): 一种detail条目由它元素全名(涉及名域URI和局部名)拟定。SOAP体元素直接子元素 也许是名域限制。 SOAP encodingStyle属性也许用来批示detail条目(见4.1.1节)编码方式。 也可以有其他Fault子元素,只要它们是名域限制。 4.4.1 SOAP 错误代码 在描述这个规范中定义错误时,这一节中定义Faultcode值必要用在faultcode元素中 。这些faultcode值得名域标志符为 "" 缺省SOAP faultcode值以可扩展方式定义,容许定义新SOAP faultcode值,并与 既有faultcode值向后兼容。使用机制类似于HTTP中定义1xx,2xx,3xx等基本 状态类(见[5]第10节),但是,它们定义为XML合法名(见 [8] 第3节 ),而不是整数。 字符"."(点)作为faultcode分隔符,点左边错误代码比右边错误代码更为普通。 如: Client.Authentication 这篇文档中定义faultcode值是: 名称 含义 VersionMismatch 解决方发现SOAP封装元素有不合法名域(见4.1.2节) MustUnderstand 解决方不理解或者不服从一种包括值为"1"mustUnderstand属性 SOAP头元素直接子元素。(见4.2.3节) Client Client错误类表达消息格式错误或者不包括恰当对的信息。例如,消息也许 缺少对的认证和支付信息。普通地,它表达消息不能不作修改就重发。参见4.4节SOAP Fault detail子元素描述。 Server Server错误类表达由于消息解决过程而不是消息内容自身使得消息消息不能 对的解决。例如,解决消息时也许要与其他解决器通信,但它没有响应。这个消息也许在 迟一点时间解决成功。 SOAP Fault子元素详细信息参见4.4节 5. SOAP编码 SOAP编码格式基于一种简朴类型系统,概括了程序语言,数据库和半构造化数据等类型系 统共同特性。一种类型或者是一种简朴(标量)类型,或者是由几种某些组合而成 复合类型,其中每个某些均有自己类型。如下将详细描述这些类型。这一节定义了类型化 对象序列化规则。它分两个层次。一方面,给定一种与类型系统符号系统一致Schema (译者注:这里schema不是符合XML语法schema,而仅仅表达广义用于表达消息结 构定义方式),就构造了XML语法Schema。然后,给定一种类型系统Schema和与这 个Schema一致特定值,就构造了一种XML文档实例。反之,给定一种依照这些规则产生 XML文档实例和初始Schema,就可以构造初始值一种副本。 这一节中定义元素和属性名域标志符为"" 勉励使用这一节中描述数据模型和编码方式,但也可以在SOAP中使用其她数据模型和编码方式。(见4.1.1节) 5.1 XML中编码类型规则 XML容许非常灵活数据编码方式。SOAP定义了一种较小规则集合。这一节在总层次上 定义了这些编码规则,下一节将描述特定类型编码规则细节。这一节定义编码规则可 以与第7节中所述RPC调用和应答映射结合使用。 下面术语用来描述编码规则: 一种"value"是一种字符串,类型(数字,日期,枚举等等)名或是几种简朴值组合。 所有值均有特定类型。 一种"simple value"没有名某些, 如特定字符串,整数,枚举值等等。 一种"compound value"是有关值结合,如定单,股票报表,街道地址等等。 在"compound value"中,每个有关值都潜在以名,序数或这两者来区别。这叫作 "accessor"。复合值例子有定单和股票报表等等。数组也是复合值。在复合值中, 各种accessor有相似名是容许,例如RDF就是这样做。 一种"array"是一种复合值,成员值按照在数组中位置互相区别。 一种"struct"也是一种复合值,成员值之间唯一区别是accessor名,accessor名互不相似。 一种"simple type"是简朴值类,如叫做"string" "integer"类,尚有枚举类等等。 一种"compound type"是复合值类。复合类型例子有定单类,它们有相似accessor 名(shipTo,totalCost等),但也许会有不同值(也许后来被设立为拟定值)。 在复合类型中,如果类型内accessor名互不相似,但是也许与其她类型中accessor名 相似,即,accessor名加上类型名形成一种唯一标志符,这个名叫作"局部范畴名"。 如果名是直接或间接基于URI一某些,那么不论它出当前什么类型中,这个名自身就可 以唯一标志这个accessor,这样名叫作"全局范畴名"。 给定了schema中有关值序列化信息,就也许拟定某些值只与某个accessor一种实例 关于。其他状况下则无法拟定。当且仅当一种accessor引用一种值,这个值才干被视为 "single-reference",如果有不止一种accessor引用它,那么就将它视为 "multi-reference"。注意,也许一种拟定值在一种schema中是 "single-reference",而在另一种schema中是"multi-reference"。 在语句构成上,一种元素也许是"independent" 或 "embedded"。一种独立元素指浮现 在序列化最顶层任何元素。所有其他元素都是嵌入元素。 虽然用xsi:type属性可以使值构造和类型变为自描述,但是序列化规则容许值类型 仅仅参照schema而定。这样schema也许使用"XML Schema Part 1:Structures" [10]和"XML Schema Part 2:Datatypes" [11]中描述符号系统,也也许使用其他 符号系统。注意,虽然序列化规则可以用于除了数组和构造之外复合类型,但是许多 schema仅仅包括数组和构造类型。 序列化规则如下: 所有值以元素内容形式表达。一种multi-reference值必要表达为一种独立元素内容 ,而一种single-reference值最佳不要这样表达(也可以这样表达)。 对于每个具备值元素,值类型时必要用下述三种方式之一描述:(a)所属元素实例有 xsi:type属性 (b)所属元素是一种有SOAP-ENC:arrayType 属性(该属性也许是缺省) 元素子元素,或者(c)所属元素名具备特定类型,类型可以由schema拟定。 一种简朴值表达为字符数据,即没有任何子元素。每个简朴值必要具备一种类型,这个类型 或者是XML Schemas Specification,part 2 [11]有类型,或者具备源类型(参见5.2节)。 一种复合值编码成一种元素序列,每个accessor用一种嵌入元素表达,该元素元素名和 accessor名一致。如果accessor名是局部于其所属类型,则该元素元素名不是 合格,否则相应元素名是合格。(参见5.4节) 一种multi-reference简朴值或复合值编码成一种独立元素,这个元素包括一种局部 无需校验属性,属性名为"id",类型为"ID"(依照XML Specification [7])。 值每个accessor相应一种空元素,该元素有一种局部,无需校验属性,属性名为 "href",类型为" uri-reference "(依照XML Schema Specification [11]), "href"属性值引用了相相应独立元素URI标志符。 字符串和字符数组表达为multi-reference简朴类型,但是特殊规则使它们在普通 状况下能被更有效表达(参见5.2.1节和5.2.3节)。字符串和字符数组值accessor 也许有一种名字为"id",类型为"ID"(依照XML Specification [7])属性。如果这 样,所有这个值所有其他accessor编码成一种空元素,这个元素有一种局部,无需校 验属性,属性名为"href",类型为" uri-reference " (依照XML Schema Specification [11]),"href"属性值引用了包括这个值元素 URI标志符。 编码时容许一种值有各种引用,就像各种不同值有各种引用同样,但这仅在从上下文可以 懂得这个XML文档实例含义没有变化时才可使用。 数组是复合值(参见5.4.2节)。SOAP数组定义为具备类型"SOAP-ENC:Array"或从它衍生类型. SOAP数组可以时一维或多维,它们成员以序数位置互相区别。一种数组值表达为反映这个 数组一系列元素,数构成员按升序浮现。对多维数组来说,右边这一维变化最快。 每个成员元素命名为一种独立元素。(见规则2) SOAP数组可以是single-reference 或multi-reference值,因而可以表达为嵌入元素 或独立元素内容。 SOAP数组必要包括一种"SOAP-ENC:arrayType"属性,它值指定了包括元素类型和数 组维数。"SOAP-ENC:arrayType"属性值定义如下: arrayTypeValue = atype asize atype = QName *( rank ) rank = "[" *( "," ) "]" asize = "[" #length "]" length = 1*DIGIT "atype"构造是被包括元素类型名,它表达为QName并且作为类型限制在XML元素声明 "type"属性中浮现(这意味着被包括元素所有值都要与该类型一致, 即在SOAP-ENC:arrayType中引用类型必要是每个数构成员类型或超类型)。 在arrays of arrays or "jagged arrays"状况下,类型组件编码为"innermost" 类型且在从第一层开始嵌套数组每一层中,类型名后都跟随一种rank构造。多维数组编 码时从第一维起,每一维之间用逗号隔开。 "asize"构造包括一种以逗号分隔列表,数值0,1或其他整数表达数组每一维长度。 整数0表达没有指定详细大小,但是也许在检查数组实际成员大小后拟定。 例如,一种5个成员整型数组arrayTypeValue值为"int[][5]",它atype值是 int[]",asize值是"[5]"。同样,一种3个成员两维整型数组arrayTypeValue值为 "int[,][3]",它atype值是int[,]",asize值是"[3]"。 一种SOAP数构成员也许包括一种"SOAP-ENC:offset"属性表达这一项在整个数组中位置 偏移值。这被用来批示一种某些储值数组(见5.4.2.1节)位置偏移值。同样,一种数组 成员也许包括一种"SOAP-ENC:position"属性表达这一项在整个数组中位置,这被用来 描述稀疏数组(见5.4.2.2节)成员。"SOAP-ENC:offset" 和"SOAP-ENC:position" 属性值定义如下: arrayPoint = "[" #length "]" 偏移值和位置从0开始 NULL值或缺省值也许通过省略accssor元素来表达。NULL值也也许通过一种包括值为'1' xsi:null属性accssor元素来表达,其他依赖于应用程序属性和值也也许用来表达 NULL值。 注意,规则2容许独立元素和数构成员名不同于值类型元素。 5.2 简朴类型 SOAP采用了"XML Schema Part 2:Datatypes"规范[11]"Built-in datatypes"节 中所有类型作为简朴类型,涉及值和取值范畴。例如: 类型 举例 int 58502 float 3979E+1 negativeInteger -32768 string Louis "Satchmo" Armstrong 在XML Schema规范中声明数据类型可以直接用在元素schema中,也可以使用从这些类型 衍生新类型。一种schema和相应具备这些类型元素数据实例例子如下所示: <element name="age" type="int"/> <element name="height" type="float"/> <element name="displacement" type="negativeInteger"/> <element name="color"> <simpleType base="xsd:string"> <enumeration value="Green"/> <enumeration value="Blue"/> </simpleType> </element> <age>45</age> <height>5.9</height> <displacement>-4
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服