文档库 最新最全的文档下载
当前位置:文档库 › XML-WSDL基础知识

XML-WSDL基础知识

XML 系列学习
XML-WSDL 基础知识

目录
目录 ................................................................................................................ 错误!未定义书签。 1. Schema ................................................................................................... 错误!未定义书签。 1.1. XML Schema 简介 ..................................................................... 错误!未定义书签。 1.1.1. 什么是 XML Schema? ................................................. 错误!未定义书签。 1.1.2. XML Schema 是 DTD 的继任者 ................................... 错误!未定义书签。 1.2. 为什么要使用 XML Schema? ................................................. 错误!未定义书签。 1.2.1. XML Schema 支持数据类型 ......................................... 错误!未定义书签。 1.2.2. XML Schema 使用 XML 语法 ...................................... 错误!未定义书签。 1.2.3. XML Schema 可保护数据通信...................................... 错误!未定义书签。 1.2.4. XML Schema 可扩展 ..................................................... 错误!未定义书签。 1.2.5. 形式良好是不够的 ........................................................ 错误!未定义书签。 1.3. 如何使用 XSD? ........................................................................ 错误!未定义书签。 1.3.1. 一个简单的 XML 文档: ............................................. 错误!未定义书签。 1.3.2. DTD 文件 ....................................................................... 错误!未定义书签。 1.3.3. XML Schema ................................................................... 错误!未定义书签。 1.3.4. 对 DTD 的引用 ............................................................. 错误!未定义书签。 1.3.5. 对 XML Schema 的引用 ............................................... 错误!未定义书签。 1.4. XSD - 元素 .................................................................. 错误!未定义书签。 1.4.1. 元素 ................................................................ 错误!未定义书签。 1.4.2. 在 XML 文档中引用 Schema ...................................... 错误!未定义书签。 简单类型 ................................................................................................ 错误!未定义书签。 2.1. XSD 简易元素 ............................................................................ 错误!未定义书签。 2.1.1. 什么是简易元素? ........................................................ 错误!未定义书签。 2.1.2. 定义简易元素 ................................................................ 错误!未定义书签。 2.1.3. 简易元素的默认值和固定值 ........................................ 错误!未定义书签。 2.2. XSD 属性 .................................................................................... 错误!未定义书签。 2.2.1. 什么是属性? ................................................................ 错误!未定义书签。 2.2.2. 如何声明属性? ............................................................ 错误!未定义书签。 2.2.3. 属性的默认值和固定值 ................................................ 错误!未定义书签。 2.2.4. 可选的和必需的属性 .................................................... 错误!未定义书签。 2.2.5. 对内容的限定 ................................................................ 错误!未定义书签。 2.3. XSD 限定 / Facets ..................................................................... 错误!未定义书签。 2.3.1. 对值的限定 .................................................................... 错误!未定义书签。 2.3.2. 对一组值的限定 ............................................................ 错误!未定义书签。 2.3.3. 对一系列值的限定 ........................................................ 错误!未定义书签。 2.3.4. 对一系列值的其他限定 ................................................ 错误!未定义书签。 2.3.5. 对空白字符的限定 ........................................................ 错误!未定义书签。 2.3.6. 对长度的限定 ................................................................ 错误!未定义书签。 2.3.7. 数据类型的限定 ............................................................ 错误!未定义书签。 复杂类型 ................................................................................................ 错误!未定义书签。 3.1. XSD 复合元素 ............................................................................ 错误!未定义书签。 3.1.1. 什么是复合元素? ........................................................ 错误!未定义书签。 3.1.2. 复合元素的例子 ............................................................ 错误!未定义书签。
2.
3.

4.
3.1.3. 如何定义复合元素? .................................................... 错误!未定义书签。 3.2. XSD 复合空元素 ........................................................................ 错误!未定义书签。 3.2.1. 复合空元素: ................................................................ 错误!未定义书签。 3.3. XSD 复合类型 - 仅含元素....................................................... 错误!未定义书签。 3.3.1. 复合类型仅包含元素 .................................................... 错误!未定义书签。 3.4. XSD 仅含文本复合元素 ............................................................ 错误!未定义书签。 3.4.1. 仅含文本的复合元素 .................................................... 错误!未定义书签。 3.5. XSD 带有混合内容的复合类型 ................................................ 错误!未定义书签。 3.5.1. 带有混合内容的复合类型 ............................................ 错误!未定义书签。 3.6. XSD 复合类型指示器 ................................................................ 错误!未定义书签。 3.6.1. 指示器 ............................................................................ 错误!未定义书签。 3.6.2. Order 指示器 ................................................................. 错误!未定义书签。 3.6.3. ccurrence 指示器 .......................................................... 错误!未定义书签。 3.6.4. Group 指示器 ................................................................ 错误!未定义书签。 3.7. XSD 元素 ........................................................................... 错误!未定义书签。 3.7.1. 元素 ...................................................................... 错误!未定义书签。 3.8. XSD 元素............................................................. 错误!未定义书签。 3.8.1. 元素 ........................................................ 错误!未定义书签。 3.9. XSD 元素替换(Element Substitution) .................................. 错误!未定义书签。 3.9.1. 元素替换 ........................................................................ 错误!未定义书签。 3.9.2. 阻止元素替换 ................................................................ 错误!未定义书签。 3.9.3. 使用 substitutionGroup ................................................. 错误!未定义书签。 3.9.4. 什么是全局元素(Global Elements)? ...................... 错误!未定义书签。 3.10. 一个 XSD 实例 ...................................................................... 错误!未定义书签。 3.10.1. XML 文档 ....................................................................... 错误!未定义书签。 3.10.2. 创建一个 XML Schema ................................................. 错误!未定义书签。 3.10.3. 分割 Schema ................................................................. 错误!未定义书签。 3.10.4. 使用指定的类型(Named Types) .............................. 错误!未定义书签。 数据类型 ................................................................................................ 错误!未定义书签。 4.1. XSD 字符串数据类型 ................................................................ 错误!未定义书签。 4.1.1. 字符串数据类型(String Data Type) .......................... 错误!未定义书签。 4.1.2. 规格化字符串数据类型(NormalizedString Data Type)错误!未定义书签。 4.1.3. Token 数据类型(Token Data Type) .......................... 错误!未定义书签。 4.1.4. 字符串数据类型 ............................................................ 错误!未定义书签。 4.1.5. 对字符串数据类型的限定(Restriction) ................... 错误!未定义书签。 4.2. XSD 日期及时间数据类型(Date and Time Data Types) ...... 错误!未定义书签。 4.2.1. 日期数据类型(Date Data Type) ................................ 错误!未定义书签。 4.2.2. 时间数据类型(Time Data Type) ............................... 错误!未定义书签。 4.2.3. 日期时间数据类型(DateTime Data Type) ................ 错误!未定义书签。 4.2.4. 持续时间数据类型(Duration Data Type) ................. 错误!未定义书签。 4.2.5. 日期和时间数据类型 .................................................... 错误!未定义书签。 4.2.6. 对日期数据类型的限定(Restriction) ....................... 错误!未定义书签。 4.3. XSD 数值数据类型(Numeric Data Types)............................ 错误!未定义书签。 4.3.1. 十进制数据类型 ............................................................ 错误!未定义书签。 4.3.2. 整数数据类型 ................................................................ 错误!未定义书签。 4.3.3. 数值数据类型 ................................................................ 错误!未定义书签。 4.3.4. 对数值数据类型的限定(Restriction) ....................... 错误!未定义书签。 4.4. XSD 杂项数据类型(Miscellaneous Data Types) .................. 错误!未定义书签。 4.4.1. 逻辑数据类型(Boolean Data Type) .......................... 错误!未定义书签。

5.
4.4.2. 二进制数据类型(Binary Data Types) ....................... 错误!未定义书签。 4.4.3. AnyURI 数据类型(AnyURI Data Type)...................... 错误!未定义书签。 4.4.4. 杂项数据类型(Miscellaneous Data Types)............... 错误!未定义书签。 4.4.5. 对杂项数据类型的限定(Restriction) ....................... 错误!未定义书签。 总结 ........................................................................................................ 错误!未定义书签。 5.1. XML Schema 概要 ..................................................................... 错误!未定义书签。 5.2. XML Schema 参考手册 ............................................................. 错误!未定义书签。 5.2.1. XSD 元素 ........................................................................ 错误!未定义书签。 5.2.2. XSD Restrictions/Facets for Datatypes ............................ 错误!未定义书签。

1. WSDL
1.1. WSDL 简介
1.1.1. 概述
WSDL 指网络服务描述语言 (Web Services Description Language) WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。 做为通讯协议,在 web 通讯中消息的格式被标准化的。WSDL 为描述网络服务定义 XML 语法使交互的端点 之间拥有信息交互的能力。WSDL 服务定义为分布式系统提供了证据并且担任自动参与在应用通讯中处理的方法。 WSDL 文档定义服务作为络交互的端点或者 ports 的集合。在 WSDL 中,抽象的定义了端点和从网络部署或 数据格式绑定分离的消息。允许重用抽象定义:messages(抽象的描述交互的数据) ;port types(operations 的集合) 。对一个特定 port type 指定明确的协议和数据格式组成了一个可重用的 binding。通过将一个网络地址 关联到可重用的 banging,定义了一个 port;port 的集合定义了一个服务。因此,WSDL 通过以下元素定义网络 服务: ? ? ? ? ? ? ? Type-包含使用类型系统(例如 XSD)创建的数据类型的定义的容器。 Message-一个抽象的、典型的关于用于交互的数据定义。 Operation-一个服务支持的行为(方法)的抽象描述。 PortType-被一个或多个端点支持的一系列操作的抽象。 Binding-一个明确的协议和为特定 porttype 指定的数据格式。 Port-一个由网络地址和一个绑定组合的单一的端点 Service-相关端点的集合。
WSDL 没 有 采 用 新 的 类 型 定 义 语 言 。 WSDL 发 现 需 要 一 个 富 类 型 系 统 来 描 述 消 息 格 式 , 并 已 XML Schema(XSD)作为其权威的类型系统。通过扩展,WSDL 允许使用其他类型定义语言来描述消息。 另外,WSDL 定义了一个通过的 binding 机制,被用于连接指定的协议或数据格式或抽象消息/操作/端点的 结构,允许被重用。 除了核心服务定义框架,本文档介绍以下的协议和消息格式作为 binding 的扩展。 SOAP 1.1 HTTP GET / POST ? MIME ? ?
1.1.2. 一个 WSDL 例子

targetNamespace="https://www.wendangku.net/doc/f017067440.html,/stockquote.wsdl" xmlns:tns="https://www.wendangku.net/doc/f017067440.html,/stockquote.wsdl" xmlns:xsd1="https://www.wendangku.net/doc/f017067440.html,/stockquote.xsd" xmlns:soap="https://www.wendangku.net/doc/f017067440.html,/wsdl/soap/" xmlns="https://www.wendangku.net/doc/f017067440.html,/wsdl/">






My first service


服务支持一个唯一的操作 GetLastTradePrice,该操作通过 SOAP1.1 协议覆盖 HTTP 进行部署。请求参数为一个 string 类型的 tickerSymbol,返回一个 float 的 price。 该例子使用固定的 XML 格式替代 SOAP 编码。
1.1.3. 符号的约定
1. 关键字 a) "MUST","REQUIRED", "SHALL"表示元素必需定义 b) "MUST NOT", "SHALL NOT"表示绝对禁止的元素。 c) "SHOULD","RECOMMENDED"
d) "MAY", "OPTIONAL"表示可选的。 e) "SHOULD NOT","NOT RECOMMENDED" f) 2. 文档使用的命名空间前缀: prefix wsdl soap http namespace URI https://www.wendangku.net/doc/f017067440.html,/wsdl/ https://www.wendangku.net/doc/f017067440.html,/wsdl/soap/ https://www.wendangku.net/doc/f017067440.html,/wsdl/http/ definition WSDL namespace for WSDL framework. WSDL namespace for WSDL SOAP binding. WSDL namespace for WSDL HTTP GET & POST binding. mime soapenc https://www.wendangku.net/doc/f017067440.html,/wsdl/mime/ https://www.wendangku.net/doc/f017067440.html,/soap/encod ing/ soapenv https://www.wendangku.net/doc/f017067440.html,/soap/envel ope/ xsi https://www.wendangku.net/doc/f017067440.html,/2000/10/XMLSchem a-instance xsd https://www.wendangku.net/doc/f017067440.html,/2000/10/XMLSchem a tns (various) The “this namespace” (tns) prefix is used as a convention to refer to the current Schema namespace as defined by XSD . Instance namespace as defined by XSD Envelope namespace as defined by SOAP 1.1 WSDL namespace for WSDL MIME binding. Encoding namespace as defined by SOAP 1.1
document. (other) (various) All other namespace prefixes are samples only. In particular, URIs starting with

“https://www.wendangku.net/doc/f017067440.html,”
represent
some
application-dependent or context-dependent URI [4]. 3. WSDL 使用非正式的语句描述 XML 语法 语句的产生作为 XML 的实例,但是值指示通过数据类型代替。 通配符:”?”-0 个或 1 个;”*”-0 个或多个;”+”-1 个或多个,至少一个 元素后加"…" (例如 or )表明上下文不相干的元素或属性被忽略
1.2. WSDL 文档结构
1.2.1. 文档结构
WSDL 文档是利用这些主要的元素来描述某个 web service 的: 元素 定义 web service 使用的描述数据交互的数据类型,为了最大程 度的平台中立性, WSDL 使用 XML Schema 语法来定义数 据类型 web service 用于传输的数据的抽象。 消息由逻辑部件组成, 每个逻辑部件关联已定义的类型;每个消息均由一个或多个 部件组成。可以把这些部件比作传统编程语言中一个函数调 用的参数。 描述一个 web service、可被执行的操作,以及相关的消息; 可以把元素比作传统编程语言中的一个函数库 (或一个模块、或一个类) 。 web service 使用的通信协议和数据格式, 为每个 port 定义 消息格式和协议细节。 指定绑定的地址,定义一个唯一的通讯端点。 聚集有关 port 的集合
一个 WSDL 文档的主要结构是类似这样的:
1.2.2. 文档命名和链接
WSDL 文件可以被复制一个可选的 name 属性,targetNamespace 属性指定一个 URL 类型。

通过使用 import 语句,WSDL 允许在文档本地关联一个 namesapce。 *
1.2.3. 编写风格
通过 import 元素可以使一个 service 的不同元素分别定义至独立的文档,在需要的时候被导入。最大程度的重用 服务的定义,以下示例显示了使用编写风格定义上述示例 https://www.wendangku.net/doc/f017067440.html,/stockquote/stockquote.xsd
https://www.wendangku.net/doc/f017067440.html,/stockquote/stockquote.wsdl

targetNamespace="https://www.wendangku.net/doc/f017067440.html,/stockquote/definitions" xmlns:tns="https://www.wendangku.net/doc/f017067440.html,/stockquote/definitions" xmlns:xsd1="https://www.wendangku.net/doc/f017067440.html,/stockquote/schemas" xmlns:soap="https://www.wendangku.net/doc/f017067440.html,/wsdl/soap/" xmlns="https://www.wendangku.net/doc/f017067440.html,/wsdl/">



https://www.wendangku.net/doc/f017067440.html,/stockquote/stockquoteservice.wsdl targetNamespace="https://www.wendangku.net/doc/f017067440.html,/stockquote/service" xmlns:tns="https://www.wendangku.net/doc/f017067440.html,/stockquote/service" xmlns:soap="https://www.wendangku.net/doc/f017067440.html,/wsdl/soap/" xmlns:defs="https://www.wendangku.net/doc/f017067440.html,/stockquote/definitions" xmlns="https://www.wendangku.net/doc/f017067440.html,/wsdl/">



My first service 该示例分为三个文档定义:数据类型定义,概要定义,服务绑定。
1.2.4. 语言扩展和绑定
在 WSDL 中,绑定指定处理关联协或者对于概要实体(message,operation 或 portType)的数据格式信息。 扩展点用于为一个特殊的协议和消息格式指定绑定信息,但是并不现实使用。扩展元素 MUST 使用一个不同于 WSDL 的 XML 命名空间。

location definitions definitions/types definitions/service definitions/service/port definitions/binding
Possible usage 为整个 WSDL 介绍额外的信息或者定义 指定 message 在 type 系统中的格式 为服务介绍额外的信息和定义 为 port 指定地址 在 port type 范围内,提供协议指定应用于操作的信 息
definitions/binding/operation definitions/binding/operation/input
提供指定应用与 input 和 output 消息的信息 提供关于概要信息部分如何映射到明确协议和数据 格式的明细。 为输入消息提供额外的协议指定信息
definitions/binding/operation/output
提供关于概要信息部分如何映射到明确协议和数据 格式的明细 为输出消息提供额外的协议指定信息
definitions/binding/operation/fault
提供关于概要信息部分如何映射到明确协议和数据 格式的明细 为错误信息提供额外的协议指定信息
1.2.5. 文档化
WSDL 使用可选的 wsdl:document 元素作为用于可读性文档化的一个容器。 该元素允许在任何 WSDL 语言元素中使用。
1.2.6. WSDL 实例
这是某个 WSDL 文档的简化的片段: * ? ? ? * <-- extensibility element --> *

* ? *
* ? * ? ? ? ? ? * ?
* ? <-- extensibility element --> * * ? <-- extensibility element --> * ? ? <-- extensibility element --> ?

? <-- extensibility element --> * * ? <-- extensibility element --> *
* ? * ? <-- extensibility element --> <-- extensibility element -->
<-- extensibility element --> *

1.3. WSDL Types
Types 元素封装了关于数据交互信息的数据类型定义。 为了实现最大程度的协同工作能力和平台无关,WSDL 比较喜欢使用 XSD 作为权威的类型系统,并且作为固 有的类型系统。
*

XSD 类型系统能够用于定义在消息中定义类型。如果对相同的消息指定多个绑定,或者只有一个绑定但是绑 定类型对应的类型系统并没有广泛使用,推荐遵循以下内容使用 XSD: ? ? 使用 element 形式(没有属性) 不包含对于编码来说独特的属性或元素 (例如: 对于与消息的概要内容来说什么也没有做) 一些例子有: 。 saop:root,soap:encodingStyle,xmi:id,xmi:name ? 数组类型需要扩展 SOAP1.1 encoding 结构(https://www.wendangku.net/doc/f017067440.html,/soap/encoding/)的数 组 类 型 的 定 义 , 为 数 组 类 型 使 用 名 字 ArraryofXXX ( XXX 标 示 数 组 元 素 的 基 本 类 型 ) 通 过 使用 。 soapenc:arrayType 属性的默认值指定元素的类型和元素的规模。当前 XSD 不支持包含 QName 值的 属性的默认值。 ? 使用 xsd:anyTYpe 标示字段/参数可是是任何类型。
期望只有一种类型系统能够描述所有的类型是不现实的, WSDL 允许类型系统凭借扩展的元素增加。 扩展元素 在 types 元素下定义产生一个类型定义的容器元素。
<-- type-system extensibility element --> *
1.4. WSDL Messages
Messages 由一个活多个逻辑部分组成,每个逻辑部分使用 message-typing 属性关联类型系统对应的一个 类型。一组 message-typing 属性是可扩展的。WSDL 使用 XSD 定义了数个 message-typing 属性: ? ? element:使用一个 QName 指定 XSD 元素 type:使用一个 QName 指定一个 XSD 的简单类型或复制类型。
其 他 message-type 属 性 只 要 使 用 不 同 于 WSDL 的 namespace 定 义 。 绑 定 扩 展 的 属 性 也 使 用 message-typing 属性。 定义 message 的语法如下:
* *
用黑标标出部分为 message-type 对应的属性。 message 元素的 name 属性指定了一个唯一的 message 名字。 part 元素的 name 属性提供了在 message 中的一个唯一的 part 名字。

1.4.1. Message Parts
Parts 是描述 Message 逻辑抽象内容的一种机制。一个 binding 可能指定 part 的名字为了详述关于 part 的 绑定信息。例如,如果使用 RPC(远程过程调用)定义一个 message,part 可能代表了信息的一个参数。无论如 何,为了确定 part 的真实意义必须检查 binding。 如果 message 拥有多个逻辑单元, 那么就有多个 part 元素被使用。 例如, 下面的 message 有一个 Purchase Order 和一个 Invoice 组成:



无论如何,如果消息的内容十分复杂的,那么使用指定的由 type system 直接定义的 message 综合结构。在这 种情况下,只有一个 part 被指定。在以下的例子中,body 及时 purchase order,也是一组 invoice



1.4.2. Abstract vs. Concrete Messages
Message 定义一般被考虑是一个 message 内容抽象定义。一个 message 绑定描述了抽象内容如何映射到 明确的格式, 尽管如此, 在一些例子中, 抽象定义对于一个或多个绑定来说非常接近明其明确的代表, 因此 binding 可能提供较少的或不提供映射信息。 无论如何, 对于那个相同 message 定义的另外的绑定可能需要扩展映射信息, 理由是,直到检查绑定后才能确定当前的 message 有多抽象。
1.5. WSDL Port Types
元素是最重要的 WSDL 元素。 它可描述一个 web service、 可被执行的操作, 以及相关的消息。 端口定义了指向某个 web service 的连接点。可以把该元素比作传统编程语言中的一个函数库(或一个模块、或 一个类) ,而把每个操作比作传统编程语言中的一个函数。 Port 类型是一个包含抽象 operation 和抽象 messsage 的集合。
* Port type 的 name 属性提供了在 WSDL 文件中,对于所有 port type 来说唯一的名字。
1.5.1. 操作类型
请求-响应是最普通的操作类型,不过 WSDL 定义了四种类型: 类型 定义

One-way
此操作可接受消息,但不会返回响应。
Request-response
此操作可接受一个请求并会发送一个相关的 消息
Solicit-response
此操作可发送一个请求,并会接受一个相关 的响应。
Notification
此操作可发送一条消息,但不会等待响应。
WSDL 指定了这些原始的操作,然而 request/response 或者 solicit/response 在理论上可以使用两个 one-way 的 message 模仿,因为以下原因,模型原始的操作是很有用的: ? ? ? ? 非常平凡的 Sequence 能够被关联,不需要引入更多复杂的流信息。 对于响应同步请求的返回,很多节点只需要接受 message 当渴望一个 flow 定义,能够简单的从这些原始操作得到
尽管 request/response 或 solicit/response 在 WSDL 文件中被逻辑关联,一个给定的 binding 描述了明 确的关联信息.例如,request 和 response messages 可以再一个或两个实际通讯的网络中进行交互。 尽管基本的 WSDL 结构支持 4 中传播原型的 binding。WSDL 仅仅为 One-way 和 Request-response 原型 定义了 binding。WSDL binding 扩展允许使用 Solicit-response 或 Notification。 Message 属性是 QName 类型
1.5.2. One-way 操作
One-Way 操作的语法: * Input 元素详述了 one-way 操作的抽象的 message 格式。
1.5.3. Request-response 操作
request-response 操作的语法:

相关文档
相关文档 最新文档