用UNION定义解决XML Schema的问题

ZDNet软件频道 时间:2003-11-10 作者:ZDNet China |  我要评论()
本文关键词:
如果用XML来进行数据交换的应用程序,难免要用XML Schema来验证XML文件的有效性。但有时可能会遇到一些尴尬的情况。本文将会告诉大家一个用UNION定义解决XML Schema的问题的方法。
本文译自Builder.com,未经许可请勿转载

如果你开发一个用XML来进行数据交换的应用程序,那么它可能需要在多种操作系统上运行,并需要与若干其它应用程序相交互。最近,我接手了一个项目,该项目的目标就是开发一个用于处理来自各种途径的XML文件,并把它们存储到SQL Server数据库的系统。

由于XML文件来源很多很杂,因此需要用XML Schema来验证XML文件的有效性。Schema定义了许多标准,包括XML Schema标准“日期”类型格式(YYYY-MM-DD)。在项目开发进入尾声阶段时,我的同事认为我们应该把时间附加到所有的日期字段(date field)中。

这个变动发生在我开始执行性能测试时。不幸的是,性能测试所用到的XML文件有一部分没有在日期字段中包含时间。只有一部分XML文件符合新的XML Schema。XML Schema非常严格,因此任何没有包括时间的XML文件在执行测试时都是无效而不可用的。由于我是在开始执行测试的十分钟之前才发现这个问题的,因此想立即得到一组正确的XML文件几乎就是不可能的。

我的解决方法就是在XML Schema中修改日期元素的simpleType定义,使其包含UNION定义。UNION定义允许在一个元素中使用多个基类型(base type)。这就允许我更新XML Schema,让它即接受date字段也接受dateTime字段。下面是一个元素的例子:

       <element name="dateCreated">
             <simpleType>
                    <union>
                          <simpleType>
                                  <restriction base="date">
                                  </restriction>
                          </simpleType>
                          <simpleType>
                                  <restriction base="dateTime">
                                  </restriction>
                          </simpleType>
                     </union>
             </simpleType>
       </element>

注意上面的例子中的UNION定义中的基类型(date和datetTime类型)都有同样的导出类型。不过使用UNION类型并不要求这一点,你可以在一个UNION定义中使用基类型的任何一种组合。

然而,如果你用验证后的XML文件中的数据来更新后端数据库,那么最好在UNION定义中使用来自相同导出类的基类型。如果你让同一个字段即使用字符又使用整型数据类型,而这个字段又是用来更新SQL Server数据库的整型字段,那么就会导致严重的问题。

 


本文作者Mark Peterson,计算机硕士,是Tek系统的顾问。他还开发了各种类型的Web站点,包括电子商务网站和企业内部网。




责任编辑:李宁

欢迎评论投稿

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