有效的 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中国
相关推荐
-
SAP收购CallidusCloud 与Salesforce竞争
一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]
-
API设计如龙生九子 各不相同
IT咨询管理公司CA Technologies对API产业做了个问卷调查,问卷内容涉及API设计风格以及管理部署的新动向。调查结果表明,JSON与XML可谓两分天下。
-
API设计:如何正确开发应用程序接口
在交互组件化软件的世界里,没有比让组件之间以及组件与移动设备和浏览器之间进行连接的应用程序接口(API)更重要的东西了。
-
从头开始实现领域驱动设计
领域描述业务;它是驱动企业的概念和逻辑的集合。如果遵循领域驱动设计(DDD)这一本质,那么领域就是应用程序中最重要的组成部分。