JAVAWEB第六天schema约束

一、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()方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值