@H_404_2@@H_404_2@@H_404_2@@H_404_2@xml@H_404_2@给基于Web的应用软件赋予了强大的功能和灵活性,给开发者和用户带来了许多好处。毋庸置疑@H_404_2@xml@H_404_2@的功能是强大的:更有意义的搜索@H_404_2@@H_404_2@、开发灵活的Web应用软件(@H_404_2@web@H_404_2@集成)、不同来源数据的集成、多种应用得到的数据、数据的本地计算和处理、数据的多样显示、粒状的更新、在Web上发布数据。@H_404_2@@H_404_2@@H_404_2@
@H_404_2@然而@H_404_2@xml@H_404_2@的使用必须建立在@H_404_2@xml@H_404_2@文件有效的基础上,例如作为最常用的配置文件来说,开发人员所创建的@H_404_2@xml@H_404_2@文件总是需要用户或者维护人员修改,那么用户和维护人员又如何知道添加什么样的数据才是有效的@H_404_2@xml@H_404_2@文件呢?@H_404_2@@H_404_2@
一、什么叫有效的@H_404_2@XML@H_404_2@@H_404_2@
如果一个@H_404_2@XML@H_404_2@文档有规定其文档类型和数据结构的@H_404_2@DTD@H_404_2@或者@H_404_2@Schema@H_404_2@,并且与之关联,并且校验正确,则此文档是有效的。格式良好的@H_404_2@XML@H_404_2@文档,不一定是有效的@H_404_2@XML@H_404_2@文档。有效的@H_404_2@XML@H_404_2@文档,则一定是格式良好的@H_404_2@XML@H_404_2@文档。@H_404_2@@H_404_2@
二、XML@H_404_2@验证技术@H_404_2@@H_404_2@
@H_404_2@ @H_404_2@
@H_404_2@ DTD方式@H_404_2@@H_404_2@
DTD@H_404_2@(@H_404_2@Document Type Definition@H_404_2@,文档类型定义)是一套标记的语法规则,它定义了元素、子元素、属性及其取值,规定了用户在@H_404_2@DTD@H_404_2@关联的@H_404_2@XML@H_404_2@文档中可以使用什么标记、各个标记出现的顺序以及标记的层次关系,并定义了实体。对于一个@H_404_2@DTD@H_404_2@的定义,最关键的在于它内部的元素和属性的定义。一个@H_404_2@DTD@H_404_2@文档实际上就是元素定义的集合,而元素可能包含属性,也可能不包含属性。@H_404_2@@H_404_2@
将@H_404_2@DTD@H_404_2@与@H_404_2@XML@H_404_2@文档关联的方式有三种:@H_404_2@@H_404_2@
a.@H_404_2@使用内部@H_404_2@DTD@H_404_2@@H_404_2@
@H_404_2@
<?xml version="1.0" encoding="GB2312" ?> <!DOCTYPE 家庭 [ <!ELEMENT 家庭 (人+,家电*)> <!ELEMENT人 EMPTY> <!ELEMENT 家电 EMPTY> <!ATTLIST 人 名字 CDATA #required 性别 (男|女) #required 年龄 CDATA #required 爱好 CDATA #IMPLIED > <!ATTLIST 家电 名称 CDATA #required 数量 CDATA #required 说明 CDATA #IMPLIED > ]> <家庭> <人 名字="郭大路" 性别="男" 年龄="25"/> <人 名字="李寻欢" 性别="男" 年龄="38" 爱好="作个教育家和伟人"/> <家电 名称="彩电" 数量="3"/> </家庭>
b.使用外部@H_404_2@DTD@H_404_2@@H_404_2@
在@H_404_2@XML@H_404_2@文档中关联外部@H_404_2@DTD@H_404_2@的语法格式为:@H_404_2@<!DOCTYPE@H_404_2@根元素名称@H_404_2@@H_404_2@SYSTEM"DTD_URL">@H_404_2@@H_404_2@
@H_404_2@
<?xml version="1.0" encoding="GB2312" ?> <!ELEMENT 家庭 (人+,家电*)> <!ELEMENT人 EMPTY> <!ELEMENT 家电 EMPTY> <!ATTLIST 人 名字 CDATA #required 性别 (男|女) #required 年龄 CDATA #required 爱好 CDATA #IMPLIED > <!ATTLIST 家电 名称 CDATA #required 数量 CDATA #required 说明 CDATA #IMPLIED >
<?xml version="1.0" encoding="GB2312" ?> <!DOCTYPE 家庭 SYSTEM "Home.dtd"> <家庭> <人 名字="郭大路" 性别="男" 年龄="25"/> <人 名字="李寻欢" 性别="男" 年龄="38" 爱好="作个教育家和伟人"/> <家电 名称="彩电" 数量="3"/> </家庭>
有些组织(例如W3C)和企业将其所定义的DTD公布出来,供需要的开发人员使用和参考。使用这些DTD的XML文档即使用了公共的DTD模板。
@H_404_2@@H_404_2@
@H_404_2@ 在@H_404_2@XML@H_404_2@文档中关联公共@H_404_2@DTD@H_404_2@的@H_404_2@语法格式为@H_404_2@<!DOCTYPE@H_404_2@根元素名称@H_404_2@@H_404_2@PUBLIC "DTD@H_404_2@名称@H_404_2@""DTD_URL">@H_404_2@@H_404_2@
@H_404_2@
DtD@H_404_2@的局限性@H_404_2@@H_404_2@
DTD@H_404_2@不遵守@H_404_2@XML@H_404_2@语法;@H_404_2@@H_404_2@
DTD@H_404_2@不可扩展;@H_404_2@@H_404_2@
DTD@H_404_2@不支持命名空间的应用;@H_404_2@@H_404_2@
DTD@H_404_2@没有提供强大的数据类型支持,只能表示很简单的数据类型@H_404_2@@H_404_2@
@H_404_2@
@H_404_2@Schema验证技术@H_404_2@@H_404_2@
@H_404_2@
在Xml中使用Schema规范来验证Xml的有效性,则在xml文件的定义中包含五部分@H_404_2@
1.在xml文件开头指定xml的版本信息等@H_404_2@
2.指定此xml文档默认命名空间@H_404_2@
3.告诉解析器,解析此文档所遵从的规范@H_404_2@
4.指定定义此文档并验证此文档有效性的Schema(xsd)文件的位置@H_404_2@
@H_404_2@
例如@H_404_2@
@H_404_2@
Schema文档@H_404_2@
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>由该Schema文档验证的xml文件@H_404_2@
<?xml version="1.0"?> <note xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn note.xsd"> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
@H_404_2@
xmlns="http://www.w3school.com.cn"规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3school.com.cn" 这个命名空间。@H_404_2@
@H_404_2@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"表示遵守w3c的xml schema规范,xml解析器解析xml文件时,就明白按照什么规范解析了。@H_404_2@
xsi:schemaLocation="http://www.w3school.com.cn note.xsd"此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置@H_404_2@
Schema新特性@H_404_2@@H_404_2@
1.Schema@H_404_2@完全基于@H_404_2@XML@H_404_2@语法,不需要再学习特殊的语法;@H_404_2@@H_404_2@
2.Schema@H_404_2@能用处理@H_404_2@XML@H_404_2@文档的工具处理,而不需要特殊的工具;@H_404_2@@H_404_2@
3.Schema@H_404_2@大大扩充了数据类型,支持@H_404_2@booleans@H_404_2@、@H_404_2@numbers@H_404_2@、@H_404_2@dates and@H_404_2@times@H_404_2@、@H_404_2@URIs@H_404_2@、@H_404_2@integers@H_404_2@、@H_404_2@decimal numbers@H_404_2@和@H_404_2@real numbers@H_404_2@等;@H_404_2@@H_404_2@
4.Schema@H_404_2@支持原型,也就是元素的继承。如:我们定义了一个“联系人”数据类型,然后可以根据它@H_404_2@产 生“朋友联系人”和“客户联系”两种数据类型;@H_404_2@@H_404_2@
5.Schema@H_404_2@支持属性组。我们一般声明一些公共属性,然后可以应用于所有的元素,属性组允许把元@H_404_2@@H_404_2@素、属 性关系放于外部定义、组合;@H_404_2@@H_404_2@
6.开放性。原来的@H_404_2@DTD@H_404_2@只能有一个@H_404_2@DTD@H_404_2@应用于一个@H_404_2@XML@H_404_2@文档,现在可以有多个@H_404_2@Schema@H_404_2@运用于一个@H_404_2@XML@H_404_2@文档。@H_404_2@@H_404_2@