SOAP协议语法拾零

ZDNet软件频道 时间:2002-08-28 作者:BUILDER.COM |  我要评论()
本文关键词:
现在用JavaScript,HTML和Perl CGI这样的Web技术来解决简易目标访问协议(SOAP)通信原则是可以的。SOAP通信明显的不足在于这些方法没有适当的SOAP句法结构——所以这些是不标准的解决方案。
现在用JavaScript,HTML和Perl CGI这样的Web技术来解决简易目标访问协议(SOAP)通信原则是可以的。SOAP通信明显的不足在于这些方法没有适当的SOAP句法结构——所以这些是不标准的解决方案。

SOAP是XML和HTTP

SOAP信息是无格式的老版本XML文件。XML提供了一种句法结构,这种句法结构能让你使用各种不同的标示。代替了<html>标签,SOAP规则描述了一种<envelope>标签。为了获得SOAP请求,三套标签是必需的。

既然标签都是配套组合的,就要在一个文档中去连接它们。这个文档就是SOAP通信。最后,通信必须被发送到某个地方。当然,你发送的并不是一个信息,而是一对信息:一套请求——应答信息。其中一个是发出“请处理数据”的消息,而另一个时发出“提交我所做的处理”的消息。

SOAP规则用HTTP来实现请求——应答通信——发送SOAP数据的过程在登陆Web页上和发送一个表格已经没有什么区别了。稍后,我将要检测怎样利用HTTP在Web浏览器(也可以说成请求客户端)和Web服务器(也可以说成是响应服务器端)之间影响发送到Internet上的内容。首先,我们来进一步研究一下SOAP的处理过程。

SOAP处理样本

在早期的SOAP icebreaker article中,有三条内容要发送到服务器中:姓名,年龄和头发的颜色。一条信息被发送回来:通过一句话对这个在表单中的人进行描述。让我们看看下面的例子:

  • 一个人:姓名(Jone Doe),年龄(21),头发的颜色(棕色)。
  • 用一句话描述成:Jone Doe 是一个深色头发的年轻人。

可以看出非常容易。现在再写一个XML的简单例子分别是发送xml和接受xml:

发送xml:

<person>
<name>John Doe</name>
<age>21</age>
<color>Brown</color>
</person>

接受xml:

<description>
John Doe is a young brunette
</description>


除了在句法中作一些小心的修订之外,SOAP通信在双方都是完整的。正是在语法结构上的规范的正式性才掩饰了SOAP简易朴素的一面。你需要整理(读:把所有的无用的东西放进)这些SOAP信息。

推敲请求响应信息

整体构造信息的主要问题在于,所有的句法结构来自一个非常局限的领域。这些信息并没有被任何暗示说明这些信息是XML,而且当然也没有指明一些标签来说明。那么我们用下面的方法来改进发送的xml信息:

<?xml version="1.0" ?>
<p:person xmlns:p="http://saturn.test.com.au/2002/person">
<p:name>John Doe</p:name>
<p:age>21</p:age>
<p:color>Brown</p:color>
</p:person>

利用xml姓名域(xmlns),我已经把所有的标识符都属于字母”P”,这代表了”http://saturn.test.com.au/2002/person”。如果信息的发送者和接收者都理解所写的意义,那么这条消息就是有意义的。但是这些标识符的简化含义到底来源于哪里呢?

标识符的简化含义被另一个XML文件说明。该文件都是来源于XSchema standard中的标识符。X系统标准是表述新标识符的一种方法,例如象<person>。既然我创建了<person>

标识符,那么我就拥有了一个X系统文件,该文件定义了象<person>这样的标识符所代表的具体含义。这非常容易明了,但是在所有的X系统文件的最后(习惯上是这样的)都附有.xsd文件,而不是.xml文件,.xsd的范围从规则提出的最开始一直到规则结束。因此http://saturn.test.com.au/2002/person 是一个person的.xsd文件,实质上这个文件只是一个XML文件。它看起来就像List A

程序员建立了XML文件。这个文件又涉及到另外一个XML文件,一个在“http://www.w3.org/2001/XMLSchema.”上的文件。这个文件用标准主体来编写,因此除了每次用该文件来处理一些象person.xsd这样的文件外,他就没什么其它用处了。

X系统定义了第二套必要的标识符。<element>标识符是最重要的。在我的模型中Person.xsd文件用两个<element>标识符去定义<person>和<description>标识符。在这个系统文件中有一个非常细节化的过程,但是要指出的这一点很重要,就是所有的信息标识符都是被定义的,所有的标识符都有类型。例如,<age>标识符是类型为type=”positiveInteger",这表示它只能在<person>标识符中出现。数据类型非常重要,因为SOAP通信通常要传递数据而不是传递格式自由的文本。甚至简单的响应消息(<description>),这是一个格式自由的文本,它都要被一串被定义的字符串所取代。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134