WSDL 设计 XML 模式注意事项(一)

日期: 2007-12-17 作者:Shawn X. K. Hu 来源:TechTarget中国

  有效的 XML 模式不一定在 WSDL 定义中有效。了解 XML 模式定义(XML Schema Definition,XSD)对 Web 服务设计有何重大影响。我们还提供了一些示例 XSD 和 WSDL,并将对其进行简单的讨论。

  引言

  可以采用很多种方式来创建 XML 模式,以使其与 W3C XML 模式规范相符。不过,有效的模式并不一定意味着其对特定的 Web 服务描述语言(Web Service Description Language,WSDL)定义也有效。本文说明了如何为 Web 服务设计恰当的构造模式,以使其同时符合 W3C WSDL 规范 (WSDL v1.1) 和 Web 服务基本概要(WS-I Basic Profile,BP v1.1)。

  在 WSDL 定义中,存在两种消息绑定样式:Document 和远程过程调用(Remote Procedure Call,RPC)。在 WS-I Basic Profile (BP) 中,对消息绑定样式进行了进一步限制。例如,SOAP 主体中的 RPC-literal 绑定必须引用 wsdl:part 中的“type”属性 (BP R2203),而 Document 绑定必须同“element”属性一起使用 (BP R2204)。属性“element”引用 XML 模式元素,而属性“type”则指示 XSD 中的 simpleType 和 complexType。简而言之,Document 样式的消息基于 XML 模式元素定义,而 RPC 消息则使用 XML 模式类型定义。

  而且,只有全局级别的元素 (BP R2206) 和类型能够在 WSDL 定义中定义。这些元素和类型是 XSD 中的 的直接子项。所有非直接子项组件都是本地的,通常嵌套在另一个模式组件中。此处的组件将引用模式元素、complexType 或 simpleType。

  将在以下各个部分中讨论三个主要 XML 模式设计模式以及其他样式:

  Russian Doll(意为“俄罗斯娃娃”)
  Salami Slice(意为“意大利香肠片”)
  Venetian Blind(意为“软百叶窗”)
  Russian Doll

  Russian Doll 模式采用的是仅具有一个全局元素的嵌套结构,如以下示例中的元素“Employee”。所有其他组件都封装在根元素中,均已本地化。

  清单 1. 采用 Russian Doll 模式的示例 XSD

  在这种情况下,能在 WSDL 定义中引用的元素只有根元素“Employee”。因此,此模式仅能用于在 WSDL 中定义 Document 样式的 Employee 消息。下面列出了示例 WSDL 和 ,且具有名为 publishEmployeeService 的操作,此操作的输入消息基于 Employee 模式。

<xs:element name=”Employee”>
    <xs:complexType>
      <xs:sequence>
 <xs:element name=”ErpPerson”>
     <xs:complexType mixed=”false”>
       <xs:sequence>
  <xs:element name=”lastName” type=”xs:string”/>
  <xs:element name=”firstName” type=”xs:string”/>
  <xs:element name=”mName” type=”xs:string”/>
       </xs:sequence>
     </xs:complexType>
 </xs:element>
 <xs:element name=”ErpAddress”>
     <xs:complexType mixed=”false”>
       <xs:sequence>
  <xs:element name=”streetNumber” type=”xs:string”/>
  <xs:element name=”streetName” type=”xs:string”/>
  <xs:element name=”suiteNumber” type=”xs:string”/>
  <xs:element name=”city” type=”xs:string”/>
  <xs:element name=”stateOrProvince” type=”xs:string”/>
  <xs:element name=”country” type=”xs:string”/>
  <xs:element name=”postalCode” type=”xs:string”/>
       </xs:sequence>
     </xs:complexType>
 </xs:element>
      </xs:sequence>
    </xs:complexType>
</xs:element>

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐