1、 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.
2、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 - 元素 . 错
3、误 !未定义书签。 1.4.1. 元素 . 错误 !未定义书签。 1.4.2. 在 XML 文档中引用 Schema . 错误 !未定义书签。 2. 简单类型 . 错误 !未定义书签。 2.1. XSD 简易元素 . 错误 !未定义书签。 2.1.1. 什么是简易元素? . 错误 !未定义书签。 2.1.2. 定义简易元素 . 错误 !未定义书签。 2.1.3. 简易元素的默认值和固定值 . 错误 !未定义书签。 2.2. XSD 属性 . 错误 !未定义书签。 2.2.1. 什么是属性? . 错误 !未定义书签。 2.2.2. 如何声明属性? . 错误 !未定义书签。 2.2.3. 属性的默
4、认值和固定值 . 错误 !未定义书签。 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. 数据类型的限定 . 错误
5、 !未定义书签。 3. 复杂类型 . 错误 !未定义书签。 3.1. XSD 复合元素 . 错误 !未定义书签。 3.1.1. 什么是复合元素? . 错误 !未定义书签。 3.1.2. 复合元素的例子 . 错误 !未定义书签。 3.1.3. 如何定义复合元素? . 错误 !未定义书签。 3.2. XSD 复合空元素 . 错误 !未定义书签。 3.2.1. 复合空元素: . 错误 !未定义书签。 3.3. XSD 复合类型 - 仅含元素 . 错误 !未定义书签。 3.3.1. 复 合类型仅包含元素 . 错误 !未定义书签。 3.4. XSD 仅含文本复合元素 . 错误 !未定义书签。 3.4.1
6、. 仅含文本的复合元素 . 错误 !未定义书 签。 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 元素
7、. 错误 !未定义书签。 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
8、Schema . 错误 !未定义书签。 3.10.3. 分割 Schema . 错误 !未定义书签。 3.10.4. 使用指定的类型( Named Types) . 错误 !未定义书签。 4. 数据类型 . 错误 !未定义书签。 4.1. XSD 字符串数据类型 . 错误 !未定义书签。 4.1.1. 字符串数据类型( String Data Type) . 错误 !未定义书签。 4.1.2. 规格化字符串数据类型( NormalizedString Data Type) 错误 !未定义书签。 4.1.3. Token 数据类型( Token Data Type) . 错误 !未定义书签。 4
9、.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
10、 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 杂项数据类型( Miscellaneo
11、us Data Types) . 错误 !未定义书签。 4.4.1. 逻辑数据类型( Boolean Data Type) . 错误 !未定义书签。 4.4.2. 二进制数据类型( Binary Data Types) . 错误 !未定义书签。 4.4.3. AnyURI 数据类型( AnyURI Data Type) . 错误 !未定义书签。 4.4.4. 杂项数据类型( Miscellaneous Data Types) . 错误 !未定义书签。 4.4.5. 对杂项数据类型的限定( Restriction) . 错误 !未定义书签。 5. 总结 . 错误 !未定义书签。 5.1. XML
12、 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 通讯中消息
13、的格式被标准化的。 WSDL 为描述网络服务定义 XML 语法使交互的端点之间拥有信息交互的能力。 WSDL 服务定义为分布式系统提供了证据并且担任自动参与在应用通讯中处理的方法。 WSDL 文档定义服务作为络交互的端点或者 ports 的集合。在 WSDL 中,抽象的定义了端点和从网络部署或数据格式绑定分离的消息。允许重用抽象定义: messages(抽象的描述交互的数据); port types( operations的集合)。对一个特定 port type 指定明确的协议和数据格式组成了一个可重用的 binding。 通过将一个网络地址关联到可重用的 banging,定义了一个 port
14、; port 的集合定义了一个服务。因此, WSDL 通过以下元素定义网络服务: Type-包含使用类型系统(例如 XSD)创建的数据类型的定义的容器。 Message-一个抽象的、典型的关于用于交互的数据定义。 Operation-一个服务支持的行为(方法)的抽象描述。 PortType-被一个或多个端点支持的一系列操作的抽象。 Binding-一个 明确的协议和为特定 porttype 指定的数据格式。 Port-一个由网络地址和一个绑定组合的单一的端点 Service-相关端点的集合。 WSDL 没有采用新的类型定义语言。 WSDL 发现需要一个富类型系统来描述消息格式,并已 XML S
15、chema(XSD)作为其权威的类型系统。通过扩展, WSDL 允许使用其他类型定义语言来描述消息。 另外, WSDL 定义了一个通过的 binding 机制,被用于连接指定的协议或数据格式或抽象消息 /操作 /端点的结构,允许被重用。 除了核心服务定义框架,本文档介绍以下的协议和消息格式作为 binding 的扩展。 SOAP 1.1 HTTP GET / POST MIME 1.1.2. 一个 WSDL 例 子 My first service 服务支持一个唯一的操作 GetLastTradePrice,该操作通过 SOAP1.1 协议覆盖 HTTP 进行部署。请求参数为一个string
16、类型的 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 namespace URI definition
17、 wsdl http:/schemas.xmlsoap.org/wsdl/ WSDL namespace for WSDL framework. soap http:/schemas.xmlsoap.org/wsdl/soap/ WSDL namespace for WSDL SOAP binding. http http:/schemas.xmlsoap.org/wsdl/http/ WSDL namespace for WSDL HTTP GET & POST binding. mime http:/schemas.xmlsoap.org/wsdl/mime/ WSDL namespace
18、 for WSDL MIME binding. soapenc http:/schemas.xmlsoap.org/soap/encoding/ Encoding namespace as defined by SOAP 1.1 soapenv http:/schemas.xmlsoap.org/soap/envelope/ Envelope namespace as defined by SOAP 1.1 xsi http:/www.w3.org/2000/10/XMLSchema-instance Instance namespace as defined by XSD xsd http:
19、/www.w3.org/2000/10/XMLSchema Schema namespace as defined by XSD . tns (various) The “this namespace” (tns) prefix is used as a convention to refer to the current document. (other) (various) All other namespace prefixes are samples only. In particular, URIs starting with “http:/” represent some appl
20、ication-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 使用的 描述数据交互的 数据类型 , 为了最大程度的平台中立性,
21、WSDL 使用 XML Schema 语法来定义数据类型 web service 用于传输的数据的抽象。消息由逻辑 部件 组成,每个逻辑 部件 关联已定义的类型 ; 每个消息均由一个或多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。 描述一个 web service、可被执行的操作,以及相关的消息 ;可以把 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。 web service 使用的通信协议 和数据格式 , 为每个 port 定义消息格式和协议细节。 指定绑定的地址,定义一个唯一的通讯端点。 聚集有关 port 的 集合 一个 WSDL 文档的主要结构是类似这
22、样的: 1.2.2. 文档命名和链接 WSDL 文件可以被复制一个可选的 name 属性, targetNamespace 属性指定一个 URL 类型。 通过使用 import 语句, WSDL 允许在文档本地关联一个 namesapce。 * 1.2.3. 编写风格 通过 import 元素可以使一个 service 的不同元素分别定义至独立的文档,在需要的时候被导入。 最大程度的重用服务的定义,以下示例显示了使用编写风格定义上述示例 http:/ http:/ definitions name=“StockQuote“ targetNamespace=“http:/ xmlns:tns=“http:/