XML 教程

XML 教程 XML 简介 XML 用途 XML 树结构 XML 语法 XML 元素 XML 属性 XML 命名空间 XML Display XML HttpRequest XML Parser XML DOM XML XPath XML XSLT XML XQuery XML XLink XML 验证器 XML DTD XML Schema XML 服务器 XML 实例 XML 测验

XML AJAX

AJAX 简介 AJAX XMLHttp AJAX 请求 AJAX 响应 AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用程序 AJAX 实例

XML DOM

DOM 简介 DOM 节点 DOM 访问节点 DOM 节点信息 DOM 节点列表 DOM 节点遍历 DOM 节点导航 DOM 获取节点 DOM 更改节点 DOM 删除节点 DOM 替换节点 DOM 创建节点 DOM 添加节点 DOM 克隆节点 DOM 实例

XPath 教程

XPath 简介 XPath 节点 XPath 语法 XPath 轴(Axes) XPath 运算符 XPath 实例

XSLT 教程

XSLT 简介 XSL 语言 XSLT 转换 XSLT <template> XSLT <value-of> XSLT <for-each> XSLT <sort> XSLT <if> XSLT <choose> XSLT Apply XSLT 客户端 XSLT 服务端 XSLT 编辑 XML XSLT 实例

XQuery 教程

XQuery 简介 XQuery 实例 XQuery FLWOR 表达式 XQuery FLWOR + HTML XQuery 术语 XQuery 语法 XQuery 添加元素和属性 XQuery 选择和过滤 XQuery 函数

XML DTD

DTD 简介 DTD 构建模块 DTD 元素 DTD 属性 DTD 元素 vs. 属性 DTD 实体 DTD 实例

XSD Schema

XSD 简介 XSD How To XSD <schema> XSD 元素 XSD 属性 XSD 限制

XSD Complex

XSD 复杂元素 XSD 空元素 XSD 仅限元素 XSD 纯文本元素 XSD 混合 XSD 指示器 XSD <any> XSD <anyAttribute> XSD 替换 XSD 实例

XSD 数据类型

XSD 字符串 XSD 日期 XSD 数值 XSD 杂项 XSD 参考手册

Web Services

XML Services 简介 XML WSDL XML SOAP XML RDF XML RSS

参考手册

DOM 节点类型 DOM 节点 DOM NodeList DOM NamedNodeMap DOM 文档 DOM 元素 DOM 属性 DOM 文本 DOM CDATA DOM 注释 DOM XMLHttpRequest DOM 解析器 XSLT 元素 XSLT/XPath 函数


XML 和 Soap

  • SOAP代表简单对象访问协议
  • SOAP是一种应用程序通信协议
  • SOAP是一种发送和接收消息的格式
  • SOAP是独立于平台的
  • SOAP是基于XML的
  • SOAP是W3C推荐的

SOAP 是什么?

web应用程序能够通过Internet进行通信是很重要的。

应用程序之间通信的最佳方式是通过HTTP,因为所有Internet浏览器和服务器都支持HTTP。创建SOAP就是为了实现这一点。

SOAP提供了一种在不同操作系统上运行的应用程序之间进行通信的方法,这些应用程序使用不同的技术和编程语言。


SOAP构建块

SOAP消息是包含以下元素的普通XML文档:

  • 将XML文档标识为SOAP消息的信封元素
  • 包含头信息的头元素
  • 包含调用和响应信息的主体元素
  • 包含错误和状态信息的故障元素

以上所有元素都在SOAP信封的默认命名空间中声明:

http://www.w3.org/2003/05/soap-envelope/

SOAP编码和数据类型的默认命名空间为:

http://www.w3.org/2003/05/soap-encoding


语法规则

以下是一些重要的语法规则:

  • SOAP消息必须使用XML进行编码
  • SOAP消息必须使用SOAP信封命名空间
  • SOAP消息不能包含DTD引用
  • SOAP消息不能包含XML处理指令


骨架SOAP消息

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

SOAP信封元素

所需的SOAP信封元素是SOAP消息的根元素。此元素将XML文档定义为SOAP消息。

实例

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

xmlns:soap 命名空间

注意 xmlns:soap 上面实例中的命名空间。它的值始终是: "http://www.w3.org/2003/05/soap-envelope/".

命名空间将信封定义为SOAP信封。

如果使用不同的名称空间,应用程序将生成错误并丢弃消息。


默认编码样式属性

encodingStyle 属性用于定义文档中使用的数据类型。此属性可能出现在任何SOAP元素上,并应用于该元素的内容和所有子元素。

SOAP消息没有默认编码。

语法

soap:encodingStyle="URI"

实例

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

SOAP 标头元素

可选的SOAP 标头元素包含有关SOAP消息的特定于应用程序的信息(如身份验证、支付等)。

如果存在标头元素,则它必须是信封元素的第一个子元素。

注释: 标头元素的所有直接子元素都必须是命名空间限定的。.

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3ccoo.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

上面的实例包含一个带有"Trans"元素的头、一个值为1的"mustUnderstand" 属性和一个值为234的属性。

SOAP在默认名称空间中定义了三个属性。这些属性是:mustUnderstand、actor和encodingStyle。

SOAP头中定义的属性定义了收件人应该如何处理SOAP消息。


必须理解属性

mustUnderstand 属性可用于指示收件人处理的头条目是强制的还是可选的。

如果将mustUnderstand="1"添加到头元素的子元素中,则表示处理标头的接收器必须识别该元素。如果接收器不识别该元素,则在处理标头时将失败。

语法

soap:mustUnderstand="0|1"

实例

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3ccoo.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

参与者属性

通过沿着消息路径传递不同的端点,SOAP消息可以从发送方传递到接收方。然而,并非SOAP消息的所有部分都可以用于最终端点,相反,它可以用于消息路径上的一个或多个端点。

actor 属性用于将Header元素寻址到特定端点。

语法

soap:actor="URI"

实例

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3ccoo.com/transaction/"
  soap:actor="https://www.w3ccoo.com/code/">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

encodingStyle 默认编码样式属性

encodingStyle 属性用于定义文档中使用的数据类型。这个属性可能出现在任何SOAP元素上,它将应用于该元素的内容和所有子元素。

SOAP消息没有默认编码。

语法

soap:encodingStyle="URI"

SOAP Body 元素

必需的 SOAP Body 元素包含用于消息最终端点的实际SOAP消息。

SOAP Body 元素的直接子元素可以是命名空间限定的。

实例

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPrice xmlns:m="https://www.w3ccoo.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

上面的例子要求苹果的价格。请注意,上面的m:GetPrice和Item元素是特定于应用程序的元素。它们不是SOAP名称空间的一部分。

SOAP响应可能如下所示:

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPriceResponse xmlns:m="https://www.w3ccoo.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


SOAP Fault 元素

可选的 SOAP Fault元素用于指示错误消息。

SOAP Fault 元素保存SOAP消息的错误和状态信息。

如果存在故障元素,则该故障元素必须显示为车身元件的子元素。故障元素只能在SOAP消息中出现一次。

SOAP Fault 元素包含以下子元素:

子元素 描述
<faultcode> 用于识别故障的代码
<faultstring> 对故障的可读性解释
<faultactor> 是谁导致故障发生的信息
<detail>

保存与Body元素相关的特定于应用程序的错误信息

SOAP 故障代码

描述故障时,必须在faultcode元素中使用以下定义的faultcode值:

Error 描述
VersionMismatch 为SOAP信封元素找到无效的命名空间
MustUnderstand 头元素的立即子元素the mustUnderstand属性设置为"1"时未被理解
Client 邮件格式不正确或包含不正确的信息
Server 服务器出现问题,因此消息无法继续

HTTP协议

HTTP通过TCP/IP进行通信。HTTP客户端使用TCP连接到HTTP服务器。建立连接后,客户端可以向服务器发送HTTP请求消息:

POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200

然后服务器处理请求并将HTTP响应发送回客户端。响应包含指示请求状态的状态代码:

200 OK
Content-Type: text/plain
Content-Length: 200

在上面的例子中,服务器返回的状态码是200。这是HTTP的标准成功代码。

如果服务器无法解码请求,它可能会返回如下内容:

400 Bad Request
Content-Length: 0

SOAP绑定

SOAP规范定义了SOAP消息的结构,而不是它们的交换方式。这个缺口被所谓的"SOAP Bindings"所填补。SOAP绑定是允许使用传输协议有效交换SOAP消息的机制。

大多数SOAP实现都为常见的传输协议(如HTTP或SMTP)提供绑定。

HTTP是同步的,应用广泛。soaphttp请求至少指定两个HTTP头:内容类型和内容长度。

SMTP是异步的,用于最后手段或特殊情况。

SOAP的Java实现通常为JMS(Java消息传递系统)协议提供特定的绑定。


Content-Type

SOAP请求和响应的Content-Type头定义消息的MIME类型和用于请求或响应的XML主体的字符编码(可选)。

语法

Content-Type: MIMEType; charset=character-encoding

实例

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

Content-Length

SOAP请求和响应的Content-Length头指定请求或响应主体中的字节数。

语法

Content-Length: bytes

示例

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

SOAP 实例

在下面的实例中,GetStockPrice请求被发送到服务器。请求有一个StockName参数和一个Price参数,该参数将在响应中返回。函数的命名空间在"http://www.example.org/stock"中定义.

SOAP 请求:

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

SOAP 响应:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPriceResponse>
    <m:Price>34.5</m:Price>
  </m:GetStockPriceResponse>
</soap:Body>

</soap:Envelope>