日期:2014-05-20  浏览次数:20754 次

请大家给我一个使用XML Schema的理由。
注意:请回答者先看完我的问题,我需要的是实际的应用层面的思路,不是理论知识。

在XML的应用中,我们会遇到XML   Schema这种验证技术,但我不明白在什么情况下,我们需要使用它。
比如:在WebService中,我们传递了XML数据,传输时它被装箱,接收时数据被强制拆箱为需要的类型,在这个过程中,数据结构都被预先定义好了,所以我们不需要使用XML   Schema技术;同样,在.net   Remoting与XML的串行化中,我们的数据结构也是预先定义好的,在这个过程中,我们同样不需要使用Schema技术。

所以我有很多疑惑和不解,请大家给我一个使用XML   Schema的理由,希望不要给我讲什么错误验证之类的话,我需要的是实际的开发情况,在什么样的情况下,我会选择使用这种技术.
我举个例子:比如我做的工作是用XSLT把第三方的XML转化成我们需要的XML格式,那么在这种情况下,我们需要用Schema来进行验证,而不必进行数据的拆箱,以便提高效率。

下面的这段话是我从ASP.NET   2.0   XML高级编程中摘录下来的,希望能对大家有点帮助.
模式信息是让客户端应用程序知道它们从服务器获得的数据结构的关键。
尽管在分布式应用程序中,模式信息只是一种占据了部分带宽的额外负担;
但是当文档的生成不由有关应用程序完全控制的时候,模式信息就至关重要了,即使它占据了部分带宽。

------解决方案--------------------
我知道的,楼主也都清楚了,我也不必多说些废话..

友情帮顶..
------解决方案--------------------
友情帮顶...
------解决方案--------------------
我给你个理由
// <xs:element name= "ReceiveTime " type= "xs:dateTime " minOccurs= "0 " />
<ReceiveTime> 2007-01-08T08:57:53.4030000+08:00 </ReceiveTime>
比如有这么个时间字段,如果不加Schema,传出去后 c#读进来 会把这个字段认为是string类型
你说说 你怎么处理这个string的时间吧(插数据库可是不认的)
加了Schema c#读进来会变成dateTime类型 应该会变成 "2007-01-08 08:57:53 "
我用它表示数据类型,方便系统重新构建以xml为基础的表.
------解决方案--------------------
我看到过一个应用,读取不同的Schema信息,动态转生成PropertyGrid里的各项。

不过多数情况下我认为没有Schema的日子也是阳光灿烂的:P
------解决方案--------------------
我给你个理由
// <xs:element name= "ReceiveTime " type= "xs:dateTime " minOccurs= "0 " />
<ReceiveTime> 2007-01-08T08:57:53.4030000+08:00 </ReceiveTime>
比如有这么个时间字段,如果不加Schema,传出去后 c#读进来 会把这个字段认为是string类型
你说说 你怎么处理这个string的时间吧(插数据库可是不认的)
加了Schema c#读进来会变成dateTime类型 应该会变成 "2007-01-08 08:57:53 "
我用它表示数据类型,方便系统重新构建以xml为基础的表.

///////////////////////
说的很对,Schema不但苗书一个XML文件还可以给出元素的类型信息,这样调用后才可以正确的解析,要不然都解析成string了
------解决方案--------------------
没用过,不过正准备在后面的项目中用这个.

一个猜想的理由:

指明数据的类型,XML传送的是String,对于任何复杂的类型他们要被传送都要求他能够转换为STRING,且能够从STRING转换回来.如果不使用Schema,转换的代码就需要自己实现了.
------解决方案--------------------
可以对xml文件进行快速有效的操作。
------解决方案--------------------
设想如下场景,也是我们项目中的真实情况
200张数据库表,每周变动一次,持续一年
我想要是没有Schema在中间作为一层数据逻辑的话 我们每天可能都得查一遍Source
比如说Log的时间,一开始客户要求到s后来到mms(一个字段变成两个),对于我们来说只是打印出数据而已 并不是一定要用它去做别的什么操作 有了Schema数据库变动后就不需要开发人员做什么 只需要配置管理员相应改一行Schema就可以了
------解决方案--------------------
比如你公司总部在北京 有台IBM主机 分部在上海 有台MS的主机
两台机子需要交互信息.那么肯定要用XML模式了.
为了规范这种信息的格式.那么就要用SCHEMA.
我是这么理解的
------解决方案--------------------
你说的情况下的确可以不用。但你说的情况只是同构平台(.NET)下同时开发的情况,这不是WebService技术的宗旨。

想象以下情况:
1.你在开发一个中间件,使用这个中间件的应用端并不同期开发,而是在以后开发,或者说你并不知道应用端的构造。

2.你在用.NET做中间层,而你的客户端不用.NET,如用Java或其它什么

这时你还能说你不用XML Schema吗?

当然,你也还是能嘴硬的说我就是不用XML Schema,那么这时请你描述你的调用接口,你是不是要用其它什么语言(也许是自然语言)来描述你的接口如何调用,要带入什么参数,将返回什么参数,这时实际上你在做一套自己的Schema而不是标准的XML Schema,但又为何不用XML Schema来描述呢,别告诉我是因为你不懂XML Schema。
------解决方案--------------------
我们项目上是用XSD约定和一个外部程序的接口规范的,即约定双方交换的XML文件的格式,就这么简单,用XSD就是Validate XML,验证合法性,它可以指定XML文件里面的具体格式和字段类型等.另外有XSD的情况下解析大型XML文件更快速。
------解决方案--------------------