XML 作为一个更好的网络数据表达方式(NDR)
HTTP是一个相当有用的RPC协议,它提供了IIOP或DCOM在组帧、连接管理以及序列化对象应用等方面大部分功能的支持。( 而且URLs与IORs和OBJREFs在功能上令人惊叹的接近)。HTTP所缺少的是用单一的标准格式来表达一个RPC调用中的参数。这则正是XML的用武之地。 象NDR和CDR,XML是一个与平台无关的中性的数据表达协议。XML允许数据被序列化成一个可以传递的形式,使得它容易地在任何平台上被解码。XML有以下不同于NDR和CDR的特点:
有大量XML编码和解码软件存在于每个编程环境和平台上XML基于文本,相当容易用低技术水平的编程环境来处理XML是特别灵活的格式,它容易用一致的方式来被扩展为支持可扩展性,在XML中每一个元素和属性有一个名域URI与它相联系,这个URI用xmlns属性来指定。
考虑下面的XML文档:
<reverse_string xmlns="urn:schemas-develop-com:StringProcs"> <string1>Hello, World</string1> <comment xmlns=‘http://foo.com/documentation‘> This is a comment!! </comment> </reverse_string>
元素<reverse_string>和<string1>的名域URI是urn:schemas-develop-com:StringProcs。元素<comment>的名域URI是http://foo.com/documentation。第二个URI也是一个URL的事实是不重要的。在这两种情况下,URI简单地被用来消除元素<reverse_string>,<string1>,<comment>和任何碰巧有同样标记名的其它元素间的歧义。
为了方便,XML允许名域URIs被映射为局部唯一的前缀。这意味着下面的XML文档在语义上等同于上面的文档:
<sp:reverse_string xmlns:sp="urn:schemas-develop-com:StringProcs" xmlns:doc=‘http://foo.com/documentation‘ > <sp:string1>Hello, World</sp:string1> <doc:comment> This is a comment!! </doc:comment> </sp:reverse_string>
后面的形式对作者来说更容易,尤其是如果有许多名域URIs在使用时。 XML也支持带类型的数据表达。正在推出的XML Schema规范为描述XML数据类型标准化了一个词汇集。下面是一个元素<reverse_string>的XML Schema的描述:
<schema xmlns=‘http://www.w3.org/1999/XMLSchema‘ targetNamespace=‘urn:schemas-develop-com:StringProcs‘ > <element name=‘reverse_string‘> <type> <element name=‘string1‘ type=‘string‘ /> <any minOccurs=‘0‘ maxOccurs=‘*‘/> </type> </element> </schema>
这个XML Schema定义阐述了XML名域urn:schemas-develop-com:StringProcs包含了一个名为<reverse_string>的元素,这个元素包含了一个名为string1的子元素(类型为string),它被0个或更多没有指定的元素所遵守。
XML Schema 规范还定义了一组内置的原始数据类型和建立一个XML文档中元素的类型的机制。下面的XML文档用XML Schema类型属性来把元素和类型名联系在一起:
<customer xmlns=‘http://customer.is.king.com‘ xmlns:xsd=‘http://www.w3.org/1999/XMLSchema‘ > <name xsd:type=‘string‘>Don Box</name> <age xsd:type=‘float‘>23.5</name> </customer>
连接XML文档事例到XML Schema描述的新的一个机制在本文写作的时候正在标准化过程中。
HTTP + XML = SOAP
SOAP把XML的使用代码化为请求和响应参数编码模式,并用HTTP作传输。这似乎有点抽象。具体地讲,一个SOAP方法可以简单地看作遵循SOAP编码规则的HTTP请求和响应。一个SOAP终端则可以看作一个基于HTTP的URL,它用来识别方法调用的目标。象CORBA/IIOP一样,SOAP不需要具体的对象被绑定到一个给定的终端,而是由具体实现程序来决定怎样把对象终端标识符映射到服务器端的对象。
SOAP请求是一个HTTP POST请求。SOAP请求的content-type必须用text/xml。而且它必须包含一个请求-URI。服务器怎样解释这个请求-URI是与实现相关的,但是许多实现中可能用它来映射到一个类或者一个对象。一个SOAP请求也必须用SOAPMethodName HTTP头来指明将被调用的方法。简单地讲,SOAPMethodName头是被URI指定范围的应用相关的方法名,它是用#符作为分隔符将方法名与URI分割开:
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:基于Windows的入门级IDS构建过程详述
下一篇:基于CS模式的Winsock网络通讯程序