知秋一叶

日出而作,日入而息,凿井而饮,耕田而食,帝力何有于我哉
随笔 - 55, 评论 - 311, 引用 - 79

导航

工具

标签

每月存档

广告



访客

 

“All schemas are relative! They are not the absolute truth. The absolute truth is whats on the wire.”
                                                                                                             ----- Don Box on SOA

    Don Box在关于SOA (Service-Oriented Architecture)的MSDV TV Show中谈到Xml Schema在SOA架构中的地位,并且引用了Steve Maine的话: “XSD is not a type system”。Steven给出的原因是XmlSchema不符合Type System的三个特点:Closed,  Definitive和Authoriatative

  • Closed: Steve Maine认为“XSD supports open content via extensibility elements such as ”。但是在我看来大多数编程语言都有与在功能上类似的构造。C#的object、C/C++的void*都可以用来支持完全开放的类型扩展,我们无法据此否定XSD的Type System本质。
  • Definitive: 虽然大多数编程语言不支持XSD的所谓Optional Element,但是通过上面的object/void*扩展,这些语言完全具备和XSD等同的表达能力, 仅仅是实现方法的差异也不足以把XSD排除在Type System之外。
  • Authoriatative: Steve认为与传统的Type System不同,同一个XML文档可能会存在很多不同的XmlSchema定义。Don Box关于这一点的注释(Search “XSD as a Type System”)很是切中要害:“The point that Steve misses however is that once you've decided which XML Schemas to use, nominal typing kicks in. At that point, there is an authoritative definition for each EII and AII - at least locally authoritative for the validation/type assignment episode you're involved in.”

   我们知道编译理论定义了两种类型兼容性:结构等价(structural equivalent)和名称等价(name equivalent)。C#和Java采用的是名称等价,一个对象实例总是与一个特定的类型联系在一起,即便两个类型的对象实例在内存结构上等同,它们也无法直接相互转换(C#的类型名称指的是FullQualifiedTypeName,包括了Assembly、Namespace、Version和StrongName);而C/C++则在一定程度上支持结构等价:结构相同的类型的实例可以相互转换(通过指针转换),这样一种内存布局结构就可能会有无数种不同的类型定义。

   XSD的工作方式其实和上面的“结构等价”非常类似(很不幸,XSD也不是完全结构等价的,参见Don Box给出的xs:list的例子):实际on-the-wire的Xml文档等价与运行时刻的memory bytes,Xml Validation过程则类似于对象的编译。在验证/编译过程中Xml文档对应于单一的Schema,对象对应于某个给定的类型;但是在传输/运行过程中,Xml文档和内存对象可以被视作任何结果上兼容的Type,而不是被单一的绑定在定义的类型上。

  所以,将XSD理解为一个Type System并没有错,关键是XSD,或者说Type System,不是SOA的必要构成。SOA的最基本形式是在HTTP上使用SOAP协议传输XML消息,你可以选择将这些Xml消息映射到某个名义类型系统(Norminal Type System),也可以选择直接处理原始的XML消息。只有当你选择进行这种XML-Object映射的时候,XSD才是必不可少的。

相关文章

Loading...

打印 | 张贴于 2004-03-24 04:02:00 | Tag:.NET

留言反馈

#回复: SOA: Is Xml Schema a Type System? 编辑
楼上说的对,俺就不喷水了。
XSD在各种数据交换的边界上是非常重要的技术,比如xml消息和对象,或者两个组织不同格式的xml数据。Biztalk已经放弃XDR被XSD招安了。
2004-03-24 15:48:00 | [匿名用户:rIPPER]
#回复: SOA: Is Xml Schema a Type System? 编辑
在SOA的wire上飞着各种各样的message,当这些message到达某个endpoint时,你需要某种手段来验证这个message是一条你能够处理的(或说你所期待的)某种message。那么即使你不去做XML-Object映射,XSD这样一种“消息结构描述语言”还是有其重要意义的——从这个意义上说,它更像是一种template description language,而不是type definition language。反过来说,任何一种能够让计算机来验证message的结构有效性的language都是可行的(哪怕是古老的DTD),所以对于SOA而言,XSD确非必要,然而XSD所起的对message的结构进行验证的作用是很必要的。
2004-03-24 10:11:00 | [匿名用户:JGTM'2004 [MVP]]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode MVC Blogger System