注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
从后台得到webshell技巧大汇总
上网要当心!HTML文件也能格式化
Qmail技巧与提示
qmail+vpopmail+mysql+qmailadmi
邮件列表黄金搭档—Qmail+Ezmlm
XML文件导入SQL Server 2000
将XML文件导入SQL Server 2000
SQL Server和XML的集成
SQL Server XML 和 Web 应用体系
深入探讨SQL Server 2000对XML的
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> XML >> 文章正文
XML技术系列讲座(11)验证XLM数据合法性(上)
作者:北京邮电大学 张剑  来源:http://www.computerworld.com.c  点击:  更新:2006-12-19
简介:
1、XML的合法性验证 应用XML技术的一个主要目标是为了方便信息交换。很显然,只有XML文档的格式或是结构得到交互各方的一致认可,这个目标才有可能实现。XML Schema(大纲)和DTD就是描述信息结构的模型,可以用来对XML文档内容的合法性进行验证。 Schema和DTD规定了在文档中能够使用的元素和属性,以及这些对象与文本内容的可能组合形式。作为对文档验证的标准,Schema和DTD不仅应该能被人们理解,对应用程序来说也应当是易于理解的。对文档合法性的验证包括两个方面:一方面是语法结构的验证,即元素类型、元素嵌套格式、属性类型、属性值数据类型、属性值是否可选等相关文档对象单元本身及其结构的合法性;另一方面是语义的验证,只有真正理解了XML文档的含义才能算是实现了信息交互,否则仅是结构上正确但意义模糊的信息,对于接收方来说一样是无用的,有时甚至会产生误解,起到相反的作用。 对XML文档的验证有如下几个步骤: 1.定义一份XML Schema或DTD: Schema或DTD为同一类型的所有文档定义了结构标准,比如有关书籍信息的文档可共享一份标准。 2.应用Schema或DTD:一般由文档的作者指定Schema,这样接收方可以很快地根据说明对文档进行验证。但在C/S(客户机/服务器)环境中,由于服务器无法判断XML在客户端是否已经验证过,所以为了能够确保验证过程,也为了避免可能的重复验证,对文档应用Schema或DTD的操作由服务器完成。 3.运行解析器进行验证:解析器在装载文档的同时扫描结构,遇到任何错误都会终止装载过程,并做出适当的响应。 2、Schema和DTD的区别 虽然,XML Schema和DTD都是用于文档验证,但二者还是有一定的区别,其中前者更为精确和灵活: ● XML Schema是一种内容“开放”的模型,可扩展、功能强,而DTD是内容“封闭”的模型,可扩展性差; ● XML Schema支持丰富的数据类型,完全能够满足网络应用特别是电子商务的需求,而DTD不支持元素的数据类型,对于属性的类型定义也很有限; ● XML Schema支持名称空间机制,DTD不支持; ● XML Schema可以针对不同情况分别对整个XML文档或者是文档局部进行验证,而DTD缺乏这种灵活性; ● XML Schema的语法完全遵循XML规范,可以和DOM技术结合使用,功能强大,而DTD语法自成一体,比较难以学习。 所以,Schema很有可能取代DTD成为验证XML文档合法性的新标准。 3、Schema的基本元素 Schema共有8种元素:<Schema>、<ElementType>、<element>、<group>、<AttributeType>、<attribute>、<datatype>和<description>。这些元素对XML中允许的语法和结构进行了定义。注意:必须在使用Schema前对这些元素进行定义。 1.<Schema>元素 Schema文件与其他的XML文档结构非常相似,根元素为<Schema>,表明文档类型: <?xml version=“1.0”?> <Schema name=“mySchema” xmlns=“urn:schemas-microsoft-com:xml-data” xmlns:dt=“urn:schemas-microsoft-com:datatypes”> </Schema> 其中属性name指定Schema名称,xmlns指定所属名称空间。第一个xmlns指定全文的缺省名称空间,第二个定义了文档中可使用的数据类型的名称空间。 在XML中引用Schema的方法是在XML文档的根元素中使用名称空间指明Schema文件的URL地址,在URL前要加上“x-schema”前缀: <?xml version=“1.0”?> <myElement xmlns=“x-schema:http://mysite.com/myschema.xml”> </myElement> 如果是在XML文档中的某一个元素中使用xmlns引用Schema,就是对文档进行局部合法性验证。 2.<ElementType>元素 <ElementType>元素用来声明XML文档中使用的新元素: <ElementType name = “element tag name” content = “empty”|“textOnly”|“eltOnly”|“mixed” model = “open” | “closed” order = “one” | “seq” | “many” dt:type = “XML data type” > </ElementType> Content属性规定声明的元素是否为空,是否包含文本或子元素,还是两者都有;order指定子元素的排列顺序; model规定了元素中是否可以包含未在Schema中定义的元素或属性; dt: type则指定了元素的数据类型。 3.<element>元素 <element>元素是对<ElementType>声明的元素的内容进行定义,说明在指定的元素类型中允许使用哪些子元素: <element type = “declared element type” minOccurs = “0” | “1” maxOccurs = “1” | “*” /> Type属性是必要的,同时要与〈ElementType〉中的name属性完全一致。minOccurs和maxOccurs属性分别指定了元素出现的最少和最多次数,默认值都为1。minOccurs为0说明元素是可选的,maxOccurs为*说明元素出现的次数不受限制。 4.<group>元素 <group>元素也出现在<ElementType>中,表达元素成组的概念。组里的对象可以是元素也可以是另一个子组。order属性制定组中元素的顺序: <ElementType name=“...” > <group minOccurs = “0” | “1” maxOccurs = “1” | “*” order = “one” | “seq” | “many” > <element type=“……” /> </group> </ElementType> 5.<AttributeType>元素 <AttributeType>元素定义了Schema中使用的属性类型。根据出现位置不同,其作用范围也不一样。如果是在<ElementType>元素中定义,那么所定义的属性类型就只能作用在该元素类型上; 如果定义在外部,那么文档中所有的元素类型就都可以使用该属性。 <AttributeType name = “attribute name” dt:type = “XML data type” required = “yes” | “no” dt:values = “enumerated list of values” default = “default value” > </AttributeType> Name是属性类型名称; dt:type同<ElementType>元素中的用法一样 ;required指定该属性对于引用它的元素是否是必要的;dt:values只有当dt:type是“enumeration”时才有效,此时它列举属性的所有可能取值; default指定属性类型的缺省值,并且一定是有效值,比如属性类型是枚举型时,default取值一定是dt:values所列举值中的一个。 6.<attribute>元素 <attribute>元素对<AttributeType>声明的属性进行具体的定义: <attribute type = “declared attribute type” required = “yes” | “no” default = “default value” /> type属性唯一指定了引用的属性类型,取值要与<AttributeType>中的name属性完全一致; required说明该属性对于引用它的元素是否为必要的; default指定属性类型的缺省值。如果对同一属性的<AttributeType>和<attribute>中相对应的default和required属性都给出了定义,那么<attribute>的优先级别更高,以它的取值为准。 其他两个元素<datatype>和<description>分别定义了Schema元素的数据类型和为元素提供的说明资料,用法简单,本文不再一一举例说明。






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务