JAVAWEB第六天schema约束

来源:互联网 发布:动态加载js文件 编辑:程序博客网 时间:2024/05/22 05:32

一、schema简介
1.schema符合xml的语法,它是一个xml文件
2.一个xml中只能有一个dtd文件,但是可以有多个schema,通过名称空间来区分(类似于JAVA中的包)
3.dtd中有#PCDATA类型,即String,但是schema中可以有多种类型(int double 等等)
4.schema的出现时为了破除dtd的局限性,但是其语法比较复杂,现在还不能代替dtd
二、schema的快速入门
1.创建一个schema文件,名字为.xsd,里面的根节点为<schema></schema>
2.在schema文件里面

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/1" xmlns:tns="http://www.example.org/1" elementFormDefault="qualified"></schema>

—属性:表示当前xml文件是一个schema约束文件

xmlns="http://www.w3.org/2001/XMLSchema" 

—使用schema文件,直接通过该地址引入约束文件,保证没有重复的,地址可以自己定义

targetNamespace="http://www.example.org/1"

—质量良好

elementFormDefault="qualified">

三、看有多少的元素
区分简单元素和复杂元素
如果是复杂元素

<element name="person">   <complexType>      <sequence>      </sequence>   </complexType></element>

简单元素,写入到复杂元素里

<element name="person">   <complexType>      <sequence>         <element name="name"></element>         <element name="age"></element>      </sequence>   </complexType></element>
<sequence></sequence>:表示元素只能按照里面的顺序出现<all></all>:元素只能出现一次<choice></choice>:元素只能出现一个<any><any>:表示可以写任意属性其中的属性:maxOccurs="unbounded":表示元素出现的次数<element name="name" maxOccurs="unbounded"></element>

定义属性:必须写是复杂元素里,写在</complexType>上面。

<attribute name="id1" type="int" use="required"></attribute>   </complexType>   定义的这个id1要写在person中

name:定义属性名称
type:定义属性类型
use:属性是否必须要出现

四、在xml中引入schema文件

<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.example.org/1" xsi:schemaLocation="http://www.example.org/1 1.xsd">

—表示xml是一个被约束文件,xsi表示包名,可以随便写

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

—是约束文档中的targetNamespace,引入的文档的地址

xmlns="http://www.example.org/1"

—targetNamespace 空格 结束文档的路径地址

xsi:schemaLocation="http://www.example.org/1 1.xsd">

引入多个schema,可以个schema起别名,如果使用部门的属性,可以用部门的schema别名:属性

<dept:name>aa</dept:name>

五、sax解析原理(事件驱动,边读边解析)
1.在java.xml.parsers包中
SAXParser:此类的实例可以从SAXParserFactory.newSAXParser()方法获得,该类的方法:parse(File f,DefultHandler dh):第一个参数:xml的路径,第二个参数:事件处理器
SAXParserFactory:实例通过newInstance()得到。

2.sax的执行过程
执行parse方法的时候,当把事件处理器传进去的时候,相当于在方法中绑定了一个事件。然后自动执行事件。事件处理器是默认传进去的。
当解析到开始标签的时候,自动执行startElement()方法
当解析到文本的时候,自动执行characters()方法
当解析到结束标签的时候,自动执行endElement()方法