xml——DTD与schema
来源:互联网 发布:手机淘宝能货到付款吗 编辑:程序博客网 时间:2024/05/17 02:58
xml给基于Web的应用软件赋予了强大的功能和灵活性,给开发者和用户带来了许多好处。毋庸置疑xml的功能是强大的:更有意义的搜索 、开发灵活的Web应用软件(web集成)、不同来源数据的集成、多种应用得到的数据、数据的本地计算和处理、数据的多样显示、粒状的更新、在Web上发布数据。
然而xml的使用必须建立在xml文件有效的基础上,例如作为最常用的配置文件来说,开发人员所创建的xml文件总是需要用户或者维护人员修改,那么用户和维护人员又如何知道添加什么样的数据才是有效的xml文件呢?
一、什么叫有效的XML
如果一个XML文档有规定其文档类型和数据结构的DTD或者Schema,并且与之关联,并且校验正确,则此文档是有效的。格式良好的XML文档,不一定是有效的XML文档。有效的XML文档,则一定是格式良好的XML文档。
二、XML验证技术
DTD方式
DTD(Document Type Definition,文档类型定义)是一套标记的语法规则,它定义了元素、子元素、属性及其取值,规定了用户在DTD关联的XML文档中可以使用什么标记、各个标记出现的顺序以及标记的层次关系,并定义了实体。对于一个DTD的定义,最关键的在于它内部的元素和属性的定义。一个DTD文档实际上就是元素定义的集合,而元素可能包含属性,也可能不包含属性。
将DTD与XML文档关联的方式有三种:
a.使用内部DTD
<?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.使用外部DTD
在XML文档中关联外部DTD的语法格式为:<!DOCTYPE根元素名称SYSTEM"DTD_URL">
DTD文件
<?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文件
<?xml version="1.0" encoding="GB2312" ?><!DOCTYPE 家庭 SYSTEM "Home.dtd"><家庭><人 名字="郭大路" 性别="男" 年龄="25"/><人 名字="李寻欢" 性别="男" 年龄="38" 爱好="作个教育家和伟人"/><家电 名称="彩电" 数量="3"/></家庭>
c.使用公共DTD
有些组织(例如W3C)和企业将其所定义的DTD公布出来,供需要的开发人员使用和参考。使用这些DTD的XML文档即使用了公共的DTD模板。
在XML文档中关联公共DTD的语法格式为<!DOCTYPE根元素名称PUBLIC "DTD名称""DTD_URL">
DtD的局限性
DTD不遵守XML语法;
DTD不可扩展;
DTD不支持命名空间的应用;
DTD没有提供强大的数据类型支持,只能表示很简单的数据类型
Schema验证技术
在Xml中使用Schema规范来验证Xml的有效性,则在xml文件的定义中包含五部分
1.在xml文件开头指定xml的版本信息等
2.指定此xml文档默认命名空间
3.告诉解析器,解析此文档所遵从的规范
4.指定定义此文档并验证此文档有效性的Schema(xsd)文件的位置
5.文档中的标签元素
例如
Schema文档
<?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文件
<?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>
代码片段解析
xmlns="http://www.w3school.com.cn"规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3school.com.cn" 这个命名空间。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"表示遵守w3c的xml schema规范,xml解析器解析xml文件时,就明白按照什么规范解析了。
xsi:schemaLocation="http://www.w3school.com.cn note.xsd"此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置
Schema新特性
1.Schema完全基于XML语法,不需要再学习特殊的语法;
2.Schema能用处理XML文档的工具处理,而不需要特殊的工具;
3.Schema大大扩充了数据类型,支持booleans、numbers、dates and times、URIs、integers、decimal numbers和real numbers等;
4.Schema支持原型,也就是元素的继承。如:我们定义了一个“联系人”数据类型,然后可以根据它产 生“朋友联系人”和“客户联系”两种数据类型;
5.Schema支持属性组。我们一般声明一些公共属性,然后可以应用于所有的元素,属性组允许把元 素、属 性关系放于外部定义、组合;
6.开放性。原来的DTD只能有一个DTD应用于一个XML文档,现在可以有多个Schema运用于一个XML文档。
- xml——DTD与schema
- 【XML】——DTD & Schema
- XML DTD与Schema约束
- XML Schema与DTD比较
- XML中的Schema与DTD
- XML DTD与Schema约束
- 【XML】标准化DTD与Schema
- XML , DTD 与 XML Schema简述
- DTD与XML Schema之比较
- 学习笔记-XML、DTD与Schema
- XML DTD约束与Schema约束
- XML的dtd与Schema约束
- xml学习笔记——dtd和schema
- XML的约两种约束——DTD、Schema
- 关于XML的总结——Schema和DTD
- XML的约两种约束——DTD、Schema
- XML的约两种约束——DTD、Schema
- Java Web开发详解——XML+DTD+XML Schema+XSLT+Servlet 3.0+JSP 2.2深入剖析与实例应用
- Bootstrap3.0入门学习系列规划[持续更新]
- Android上去掉系统菜单栏,删除SystemUI.apk
- jsp登录前后显示不同内容
- ALAssetsLibrary读取相册里面的图片
- 面试注意点和面试官最关注的点
- xml——DTD与schema
- 程序员励志小故事
- 我倚窗而坐
- gsoap读取的sqlite数据库,并编写为JSON格式
- 2013年五大主流浏览器 HTML5 和 CSS3 兼容性大比拼
- 采购接收会计期间未打开报错分析
- RTP封装h264
- sqlserver 行转列
- String to Integer (atoi)