您现在的位置是: 软件 > 开发者网络 > 微软开发专栏 > 技术专题 > 正文


-网页表格制作速查手册
-Visual C++ MFC/ATL开发
-Visual C++ 数据库开发
-打开闪烁的新世界:体验Flash MX

简单对象协议(SOAP)简介
2002-04-11· ·cqlazy··天极论坛

上一页  1 2 3 4  下一页

  第三节 SOAP数据类型

  在SOAP消息中,每个元素可能是一个SOAP结构元素、根元素、存取元素或一个独立的元素。在SOAP中,soap:Envelope、soap:Body和soap:Header是唯一的组成元素。它们的基本关系由下列XML Schema所描述:

<schema targetNamespace=''urn:schemas-xmlsoap-org:soap.v1''>
<element name=''Envelope''>
<type>
<element name=''Header'' type=''Header'' minOccurs=''0'' />
<element name=''Body'' type=''Body''minOccurs=''1'' />
</type>
</element>
</schema>

  在SOAP元素的四种类型中,除了结构元素外都被用作表达类型的实例或对一个类型实例的引用。

  根元素是显著的元素,它是soap:Body 或是 soap:Header的直接的子元素。其中soap: Body只有一个根元素,它表达调用、响应或错误对象。这个根元素必须是soap:Body的第一个子元素,它的标记名和域名URI必须与HTTP SOAPMethodName头或在错误消息情况下的soap:Fault相对应。而soap:Header元素有多个根元素,与消息相联系的每个头扩展对应一个。这些根元素必须是soap:Header的直接子元素,它们的标记名和名域URI表示当前存在扩展数据的类型。

  存取元素被用作表达类型的域、属性或数据成员。一个给定类型的域在它的SOAP表达将只有一个存取元素。存取元素的标记名对应于类型的域名。考虑下列Java 类定义:

package com.bofsoap.IBank;
public class adjustment {
public int account ;
public float amount ;
}

  在一个SOAP消息中被序列化的实例如下所示:

<t:adjustment xmlns:t=''urn:develop-com:java:com.bofsoap.IBank''>
<account>3514</account>
<amount>100.0</amount>
</t:adjustment>

  在这个例子中,存取元素account和amount被称着简单存取元素。对引用简单类型的存取元素,元素值被简单地编码为直接在存取元素下的字符数据,如上所示。对引用组合类型的存取元素(就是那些自身用子存取元素来构造的存取元素),有两个技术来对存取元素进行编码。最简单的方法是把被结构化的值直接嵌入在存取元素下。考虑下面的Java类定义:

package com.bofsoap.IBank;
public class transfer {
public adjustment from;
public adjustment to;
}

  如果用嵌入值编码存取元素,在SOAP中一个序列化的transfer对象如下所示:

<t:transfer xmlns:t=''urn:develop-com:java:com.bofsoap.IBank''>
<from>
<account>3514</account>
<amount>-100.0</amount>
</from>
<to>
<account>3518</account>
<amount>100.0</amount>
</to>
</t:transfer>

  在这种情况下,adjustment对象的值被直接编码在它们的存取元素下。在考虑组合存取元素时,需要说明几个问题。先考虑上面的transfer类。类的from和to的域是对象引用,它可能为空。SOAP用XML Schemas的null属性来表示空值或引用。下面例子表示一个序列化的transfer对象,它的from域是空的:

<t:transfer xmlns:t=''urn:develop-com:java:com.bofsoap.IBank''
xmlns:xsd=''http://www.w3.org/1999/XMLSchema/instance''>
<from xsd:null=''true'' />
<to>
<account>3518</account>
<amount>100.0</amount>
</to>
</t:transfer>

  在不存在的情况下, xsd:null属性的隐含值是false。给定元素的能否为空的属性是由XML Schema定义来控制的。例如下列XML Schema将只允许from存取元素为空:

<type name=''transfer'' >
<element name=''from'' type=''adjustment'' nullable=''true'' />
<element name=''to'' type=''adjustment'' nullable=''false''/>
</type>

  在一个元素的Schema声明中如果没有nullable属性,就意味着在一个XML文档中的元素是不能为空的。Null存取元素的精确格式当前还在修订中�要了解用更多信息参考最新版本的SOAP规范。

上一页  1 2 3 4  下一页

■ 相关内容
 .Net体系结构指导
 .Net开发平台(下)
 .Net开发平台(上)
 IBM和微软在.Net和Java上分歧严重
 .Net-Java 争论的再次回顾
 Sun不支持SOAP; Microsoft的工具具有了优势
 Microsoft .NET框架和Visual Studio.NET中的SOAP
 SOAP+Flash 更友好的Web应用程序
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!