无废话XML--XML约束(schema)
- Schema 的由来
DTD 作为 XML 1.0 规范的重要组成部分, 对于 XML 文档的结构起到很好的描述作用。 但是,它也具有一些缺点,比如,它采用了非 XML 的语法规则、不支持数据类型、扩展性较差等等。Schema 正好解决了这些问题。从总体上讲,Schema 具有以下优点:
• 一致性:Schema 使得对 XML 的定义不必再利用一种特定的形式化的语言,而是直接借助 XML 自身的特性,利用 XML 的基本语法规则来定义 XML 文档的结构,使得XML 达到了从内到外的完美统一,也为 XML 的进一步发展奠定了坚实的基础。
• 扩展性:Schema 对 DTD 进行了扩充,引入了数据类型、命名空间,从而使其具备较强的可扩展性。
• 互换性:利用 Schema,我们能够书写 XML 文档以及验证文档的合法性。另外,通过特定的映射机制,还可以将不同的 Schema 进行转换,以实现更高层次的数据交换。
• 规范性:同 DTD 一样,Schema 也提供了一套完整的机制以约束 XML 文档中置标的使用,但相比之下,后者基于 XML,更具有规范性。Schema 利用元素的内容和属性来定义 XML 文档的整体结构,如哪些元素可以出现在文档中、元素间的关系是什么、每个元素有哪些内容和属性、以及元素出现的顺序和次数等等,都可一目了然。
- Schema 的发展
Schema 是伴随着 XML1.0 规范的制订而推出的,从 Schema 的第一个方案到现在为止,W3C 成员共提交了五个 Schema 规范,分别是 XML-Data、DCD(Document ContentDescription for XML)、SOX(Schema for Object-Oriented XML)、DDML(Document DefinitionMarkup Language)和 XML Schema。直到现在,关于
Schema 还没有一个正式推荐标准,它仍处于不断修改完善的过程当中。
- 初识 Schema
下面以一个简单的示例对 Schema 进行介绍:
1. <?xml version="1.0" encoding="GB2312" ?>
2. <Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
3. <AttributeType name="序号"/>
4. <AttributeType name="性别"/>
5. <ElementType name= "姓名"/>
6. <ElementType name= "年龄"/>
7. <ElementType name= "电话" dt:type="fixed.14.4"/>
8. <ElementType name= "地址" />
9. <ElementType name= "联系人" content="eltOnly">
10. <element type= "姓名" />
11. <element type= "年龄" />
12. <element type= "电话" />
13. <element type= "地址" />
14. </ElementType>
15. <ElementType name= "通讯录" content="eltOnly">
16. <element type= "联系人" />
17. <attribute type="序号"/>
18. <attribute type="性别"/>
19. </ElementType>
20.</Schema>
----第 1 行是 XML 类型声明语句,指明该文档是一个 XML 文档,并且符合版本 1.0 规范;该文档采用 GB2312 编码。
----第 2 行是 Schema 声明语句,它包含了 Schema 命名空间的声明。本例中用到了两个命名空间:一是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文档是一个 XMLSchema 文档;另一个是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定义了在本文档中可以使用的数据类型。
----第 3、4 行是属性定义语句,它定义了两个属性:序号和性别。
----第 5、6、7、8 行是元素定义语句,它定义了四个元素:姓名、年龄、电话、地址。其中为"电话"元素定义了数据类型:fixed.14.4。
----第 9-14 行定义了本 XML Schema 的二级元素:联系人,指明该元素包含四个子元素:姓名、年龄、电话、地址。
----第 15-19 行定义了本 XML Schema 的顶级元素:通讯录,指明该元素包含一个子元素:联系人,以及两个属性:序号、性别。
----第 20 行是结束标记语句,它表明该 XML Schema 的描述到此为止。
- Schema 语法
Schema 有着自己的一套完整的语法,涉及到的关键元素包括:Schema、ElementType、element、AttributeType、attribute、group、datatype、description。
1,Schema元素是XML Schema中第一个出现的元素, 用于声明该XML文档是一个Schema文档。Schema 具有两个属性:name 指定该 Schema 的名称,而 xmlns 则指定该 Schema包含的命名空间。
2,ElementType 元素是 XML Schema 中重要元素之一,用于定义该 XML Schema 文档中出现的元素。 通过属性 content 来表明 ElementType 所声明的元素是否为空、 是否包含文本、是否包含子元素、还是既包含文本又包含子元素,通过 dt:type 指定该元素的数据类型,通过 order 指定该元素的子元素的排列规则,相应取值有:one、seq、many。element 元素是用于声明在 ElementType 中出现的元素,它需要同ElementType 配合使用。
3,AttributeType 元素用于定义在 Schema 文档中出现的属性类型。其属性 dt:type 指定所声明属性类型的数据类型, 可支持的数据类型包括: entity, entities, enumeration, id, idref,idrefs, nmtoken, nmtokens, notation, 和 string。default 属性可用于指定该属性类型的缺省取值。required 属性指定该属性对于引用它的元素是否是必须的。 attribute 元素实际上是对 AttributeType
声明的属性的引用,它也需要同 AttributeType 配合使用。
4,group 元素是用于将 XML 文档中的元素分组。通过属性 order 可指定该分组中的元素或子分组的顺序, 通过 minOccurs 和 maxOccurs 分别指定该分组在 XML 实例文档中出现的最少和最多次数。
5,datatype 是 XML Schema 中一个重要元素,也是 XML Schema 的一大特色,它用于为ElementType 和 AttributeType 指定数据类型。 XML Schema 支持两种数据类型, 一种是 XML1.0 标准中定义的十种基本数据类型:entity, entities, enumeration, id, idref, idrefs,nmtoken, nmtokens, notation, 和 string; 另外, 还支持一些扩展数据类型, 包括: bin.base64,bin.hex,
boolean, char, date, dateTime, dateTime.tz, fixed.14.4, float, int, number, time,time.tz, i1, i2, i4, r4, r8, ui1, ui2, ui4, uri, uuid。
6,description 只能算是 XML Schema 中一个配角,它的主要作用是为 ElementType 和AttributeType 元素提供描述信息。
- Schema 的应用
由于 XML Schema 的种种优点,现在 Schema 取代 DTD 已成大势所趋。在这种情况下,国际上一些知名企业和组织审时度势纷纷在战略上向 XML Schema 倾斜,提供对 XMLSchema 的支持。其中最为典型的当然要数微软的 BizTalk 和 xml.org 组织的注册/资源库。更加值得一提的是,微软在其浏览器软件 Internet Explorer
5.0 中率先提供对 Schema 的支持,当然,因为最终的 XML Schema 标准尚未正式推出,因此微软支持的 Schema 也只是过渡性"标准",今后还会不断修改。
我们在使用框架写XML的时候,使用的就是schema。说下我理解最深的一点,为什么框架这里要使用schema,框架要放好多不同的包进来,那么这个是就会有一个命名冲突的问题。为了解决这个问题,那么我们写XML标签的时候就要声明不同的命名空间,比如说这个标签是那个命名空间下的。schema很好的解决了这个问题,而且直接一看就可以直接这份XML中,我们那些可以使用,那些不可以使用,要想只用特定的命名空间的标签那么我们必须要引入特定的schema。
以下是一份具体的SPRINGMVC层的配置文件的schema:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/aop
http://www.directwebremoting.org/schema/spring-dwr
http://directwebremoting.org/schema/spring-dwr-2.0.xsd">
- 关于上面这个schema说明如下:
1,xmlns: 命名空间缺省定义方式
2,xmlns:xsi:声明XML Schema实例名称空间并将xsi前缀与该名称空间绑定,这样模式处理器就可以识别xsi:schemaLocation属性。XML Schema实例名称空间的前缀通常使用xsi。
如果没有那句话,下边的xsi:schemaLocation这个属性不起作用。
3,xsi:schemaLocation:这个schema文件的地址。
在j2ee中,上面这3个东西都是存在的,所以就不用管了。比如说web.xml里面也有这3句话的:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
我们要想使用<mvc:annotation-driven />这种指定命名空间的标签,就必须导入上面xmlns:mvc="http://www.springframework.org/schema/mvc" ,意思就是告诉这个XML说:这个XML可以使用这个mvc标签了,然后里面的东西都是定义在mvc这个命名空间下的。此外还要把这个schema的地址引入进来,也就是http://www.springframework.org/schema/mvc ,http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
这2个地址,这样子就可以使用这个mvc标签了。
- 最后说一下命名空间
命名空间声明有两种方式,即直接定义方式和缺省定义方式:
直接定义方式: xmlns: [命名空间前缀] = [命名空间名]
缺省定义方式: xmlns = [命名空间名]
无废话XML--XML约束(schema)的更多相关文章
- XML的约束(schema)
XML Schema也是一种用于定义和描述XML文档结构与内容的模式语言,其出现是为了克服DTD的局限性 XML Schema符合XML语法结构 DOM.SAX等XML API很容易解析出XML Sc ...
- XML(二)之DTD——XML文件约束
前面介绍了XML的作用和基本的格式,今天我给大家分享的是关于XML的约束.废话不多说,我们直接来正题! 一.DTD简介 1.1.DTD概述 DTD(Document Type Definition,文 ...
- XML文件定义约束
今天在做Android项目的时候,用到了XML解析,服务端返回的不是JSON,而是XML,这时候就需要我们解析XML了,当然在解析XML的时候,需要了XML文件的定义结构,任何一个文件的定义都是要遵循 ...
- xml的约束
一.DTD约束xml 1.约束介绍 由于xml的标签由用户自己定义,因此在开发的时候,每个人都可以根据自己的需求来定义xml标签,这样导致项目中的xml难以维护,因此需要使用一定的规范机制来约束xml ...
- [讨论] Window XP 安装msxml6后,load xml时提示schema验证失败
现象:在windows XP x64下,使用用户安装的msxml6库加载xml文件时失败. 进一步说明: 该xml文档使用了W3C的名称空间 xmlns:xsi= "http://www.w ...
- xml文件的schema也是经过jdk编译器编译的,如果xsd没引入完整,而xml中又用到了这些标签,就会编译不通过啊。
1.xml文件的schema也是经过jdk编译器编译的,如果xsd没引入完整,而xml中又用到了这些标签,就会编译不通过啊. 2.java编译器会下载xsd的指定链接文件,加在代码里,一起编译
- 无废话XML--XML细节
今天开始研究xml,其实在实际的开发中,我们参与到真正的XML开发并不是很多,最多写一个配置,但是我还是觉得很有必要把XML的知识整理一遍.作为基本的2种的数据交互载体(还有一个是json),基本的X ...
- WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]
WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...
- 无废话WCF入门教程六[一个简单的Demo]
一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...
随机推荐
- 三十分钟学会AWK
摘要: 本文大部分内容翻译自我开始学习AWK时看到的一篇英文文章 AWK Tutorial ,觉得对AWK入门非常有帮助,所以对其进行了粗略的翻译,并对其中部分内容进行了删减或者补充,希望能为对AWK ...
- flask-日料网站搭建
引言:想使用python的flask框架搭建一个日料网站,主要包含web架构,静态页面,后台系统,交互. 本节知识:搭建web目录,目前正在copy网站. python环境:python2.7,fla ...
- jqueryui sortable拖拽后保存位置
jqueryUI sortable 可以用来进行页面拖拽布局,然而有一个小问题就是拖拽后如何保存状态. 工作中遇到了这个情况,遍把这个问题记了下来,具体思路是: 利用拖拽stop后利用 var a ...
- mmap函数实现
转自:https://www.cnblogs.com/huxiao-tee/p/4660352.htmlmmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址 ...
- Mybatis中常用的SQL
1.BaseResultMap <resultMap id="BaseResultMap" type="com.stylefeng.guns.common.pers ...
- backbone 要点知识整理
1.backbone 是个mvc的库,官方文档说它是个库,而不是个框架.库和框架的区别就是,库只是个工具,方便你的项目应用,不会改变你的项目结构,而框架会有一套自己的机制,项目需要遵循框架的设计来实现 ...
- 新浪新闻页面抓取(JAVA-Jsoup)
1.使用gradle建立工程: 工程格式如下: include ':spider-demo' rootProject.name = 'my-spider-demo' settings def void ...
- Jfinal启动源码解读
本文对Jfinal的启动源码做解释说明. PS:Jfinal启动容器可基于Tomcat/Jetty等web容器启动,本文基于Jetty的启动方式做启动源码的解读和分析,tomcat类似. 入口 JF ...
- mac上安装mongodb数据库教程
1.官网下载压缩包,并解压到当地任一目录.(我的是Documents/develop/mongodb) 2.在mongodb下新建data文件夹,在data下新建db文件夹.(bin和data文件夹在 ...
- [51nod1232]完美数
如果一个数能够被组成它的各个非0数字整除,则称它是完美数.例如:1-9都是完美数,10,11,12,101都是完美数,但是13就不是完美数(因为13不能被数字3整除). 现在给定正整数x,y,求x和y ...