Schme详解
来源:互联网 发布:生产法工业增加值算法 编辑:程序博客网 时间:2024/05/16 12:57
在学习一门技术之前,首先要问问自己这几个问题:
1、这个东东是什么 (或者东东是什么)?
2、这个东东能做什么 ?
3、在企业里怎么用这个东东 ?
好了, 问了这三个问题之后, 你就必须做出回答,只有完整的回答了这几个问题,你对这个东东也由浅到深的掌握之中。
首先回答第一个问题:Schema 是什么?
Schema是一种用来限定和描述xml文档的模式语言,他的出现是为了替代DTD的局限性(例如:在DTD中不能很好的指定数据的类型),schema文档其实也是一份xml文档,但是他的扩展名为.xsd, 一份Schema文档被称之为模式文档或者约束文档, 遵循这个文档所编写的文档称之为实例文档。在这里就算是湖大完毕, 不够你可以补充一些,如下:以Schema使用约束xml文档的, Schema文档既然是一份xml文档,那么他就必须要遵循xml的语法,那就必须有一个根节点(根元素),在Schema 中根元素默认并且只能是schema。回答完毕。
回答第二个问题: Schema能做什么用?
这个问题的答案其实已经在第一个问题中出现, 他就是用来约束xml文档的,因为xml是可扩展标记语言,在xml中可以定义自己的标签,他不向html,标签式固定的,在xml可以定义自己的标签,那么每个人定义的标签肯定会不一样,若想大家都能统一的是使用xml,那么就必须要对xml进行约束,这个约束可以xml文档里或单独写在一个文档里,而这个用来约束xml的文档也就称为约束文档,在Schema没有出现以前使用DTD约束,在Schema出现以后使用Schema约束。 回答完毕
回答第三个问题:在企业里怎么使用Schema来约束xml文档呢?
在上面也已经说过了,Schema文档中的跟元素是schema,在编写schema文档时,必须将在标签(或根元素)<schema >中定义的元素绑定到一个URI上,在Schema中有一专业术语叫做名称空间,在解析xml时告诉解析引擎这份xml文档中的元素来自哪里,被谁约束。
编写Schema文档的步骤:
1、在根元素schema中声明一个名称空间,该名称空间要使用指定的官网上定义好了的<schema xmlns="http://www.w3.org/2001/XMLSchema" >, 使用xmlns来声明命名空间的, xmlns是什么?他就是xml namespace的缩写,前面是使用了默认的命名空间,接下类声明一个有具体名字的名称空间,xmlns:csdn="http://www.w3.org/2001/XMLSchema" >,
2、为自己定义元素指定一个名称空间,也就是配置targetNamespace的值,
在这里必须要注意两个问题:
1、这个targetNamespace的值必须要和被约束的xml文档中声明的名称空间的名字相同,以便告诉解析引擎我这份xml文档中的元素都来自这个名字空间,否则这份约束文档将不会起作用
2、若要在Schema中使用自定义限定类型,那么就必须要声明这样的命名空间(如:xmlns:tns="http://www.example.org/limitValue"),并且xmlns:tns的值也必须要和targeNamespace的值相同
疑惑:但是这里为什么要声明一个命名空间为tns呢? 而且他的值也必须要相同呢 ?,否则会报错,错误如下:
3、到目前为止,编写Schema的初步工作已经完成,剩下的就是定义自己所需要使用的元素,至于还有elementFormDefault要不要配置? 经过测试配不配关系不大,但是我们要知道这个是干什么用的,他能起到什么作用,他的作用:将elementFormDefault设置为qualified, 若在xml文档中没有使用默认名称空间,则搜有的元素必须通过加上声明的名称空间为前缀访问元素; 将elementFormDefault设置为unqualified, 则不要加前缀访问元素
例如:book3.xsd 将book3.xsd中elementFormDefault设为qualified, 那么在book3.xml中就必须使用使用前缀来访问,但是若将elementFormDefault设为unqualified, 那么在book3.xml 就不能使用前缀来访问
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace="aaaa"elementFormDefault="qualified"><xs:element name="books"><xs:complexType><xs:sequence><xs:element name="book" ><xs:complexType><xs:sequence><xs:element name="author" type="xs:string" /><xs:element name="bookname" type="xs:string" /><xs:element name="price" type="xs:string" /></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element></xs:schema>
book3.xml
<?xml version="1.0" encoding="UTF-8"?><itcast:books xmlns:itcast="aaaa" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="aaaa book3.xsd" > <itcast:book> <itcast:author></itcast:author> <itcast:bookname></itcast:bookname> <itcast:price></itcast:price> </itcast:book></itcast:books>
4、最后在编写完Schema文档之后,你必须在xml文档中引入Schema文档,怎么引入呢? 在根元素中引入Schema的约束
例如:<rootElement xmlns="这里的值必须要与Schema中的targetNamespace的值一样(这里暂且用aaa代替)"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="aaa book.xsd">
</rootElement>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"代表该xml文件 是一个Schema 文档实例文档
将Schema引入到xml文档中,成功过的约束了xml文档,第三个问题回答完毕.
- Schme详解
- 详解
- 详解
- 详解
- 详解
- &,&&,|,||详解
- 详解
- Scala详解--------基础知识详解
- Spring详解-----------事务详解
- github 详解详解
- InputFilter详解、TextWatcher详解
- Spring详解-----------事务详解
- 【词汇详解】事务详解
- Session 详解
- Session 详解
- sizeof详解
- 端口详解
- Meta详解~~~
- 分享纯C语言英汉字典源码
- Google地图.cn与.com的偏移问题
- ORACLE SQL语句优化技术分析
- 工厂模式
- 启动嵌入式Jetty服务器
- Schme详解
- IA32寄存器
- java中String Date Timestamp Calendar 之间的关系及转换
- Vim search
- hdu 1022
- 通过HTTP协议实现多线程下载
- QT中状态机框架测试
- Shell Tips: 用GNU Screen实现发送交互到所有会话
- 混淆编译及参数说明