xml的约束

为什么需要约束?
       比如现在定义一个person的xml文件,只想要这个文件里面保存人的信息,比如name age等,但是如果在xml文件中写了一个标签<猫>,发现可以正常显示,因为符合语法规范。但是猫肯定不是人的信息,xml的标签是自定义的,需要技术来规定xml中只能出现的元素,这个时候需要约束。

       xml的约束的技术 : dtd约束schema约束 

dtd约束
* 创建一个文件 后缀名 .dtd
步骤:
(1)看xml中有多少个元素 ,有几个元素,在dtd文件中写几个
(2)判断元素是简单元素还是复杂元素
- 复杂元素:有子元素的元素

- 简单元素:没有子元素

(3)需要在xml文件中引入dtd文件



dtd的三种引入方式
(1)引入外部的dtd文件

(2)使用内部的dtd文件



]>
(3)使用外部的dtd文件(网络上的dtd文件)

- 后面学到框架 struts2 使用配置文件 使用 外部的dtd文件
-
  "http://struts.apache.org/dtds/struts-2.0.dtd">


使用dtd定义元素
* 语法:


* 简单元素:没有子元素的元素

*** (#PCDATA): 约束name是字符串类型
*** EMPTY : 元素为空(没有内容)
-
*** ANY:任意
* 复杂元素:

- 子元素只能出现一次
*


* 表示子元素出现的次数
+ : 表示一次或者多次
? :表示零次或者一次
* :表示零次或者多次

* 子元素直接使用逗号进行隔开 ,
** 表示元素出现的顺序


* 子元素直接使用|隔开
** 表示元素只能出现其中的任意一个

使用dtd定义属性
* 语法:
属性名称 属性类型 属性的约束>

* 属性类型
- CDATA: 字符串
-
ID1 CDATA #REQUIRED>

- 枚举 : 表示只能在一定的范围内出现值,但是只能每次出现其中的一个
** 红绿灯效果
** (aa|bb|cc)
-
ID2 (AA|BB|CC)  #REQUIRED>

- ID: 值只能是字母或者下划线开头
-
ID3 ID   #REQUIRED>

* 属性的约束
- #REQUIRED:属性必须存在

- #IMPLIED:属性可有可无

- #FIXED: 表示一个固定值 #FIXED "AAA"
- 属性的值必须是设置的这个固定值
-
ID4 CDATA #FIXED "ABC">
- 直接值
* 不写属性,使用直接值
* 写了属性,使用设置那个值
-
ID5 CDATA "WWW">


schema约束

* 创建一个schema文件 后缀名是 .xsd
** 根节点
** 在schema文件里面
** 属性  xmlns="http://www.w3.org/2001/XMLSchema"
- 表示当前xml文件是一个约束文件
** targetNamespace="http://www.cust.edu.cn/20151111"
- 使用schema约束文件,直接通过这个地址引入约束文件
** elementFormDefault="qualified"
步骤
(1)看xml中有多少个元素

(2)看简单元素和复杂元素
* 如果复杂元素


子元素


(3)简单元素,写在复杂元素的








(4)在被约束文件里面引入约束文件
xmlns="http://www.itcast.cn/20151111"
xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd">

** xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-- 表示xml是一个被约束文件
** xmlns="http://www.cust.edu.cn/20151111"
-- 是约束文档里面 targetNamespace
** xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd">
-- targetNamespace 空格  约束文档的地址路径

:表示元素的出现的顺序
: 元素只能出现一次
:元素只能出现其中的一个
maxOccurs="unbounded": 表示元素的出现的次数
:表示任意元素

* 可以约束属性
* 写在复杂元素里面
***写在 之前


- name: 属性名称
- type:属性类型 int stirng
- use:属性是否必须出现 required

复杂的schema约束
xmlns:dept="http://www.example.org/department"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/company company.xsd http://www.example.org/department department.xsd" >
* 引入多个schema文件,可以给每个起一个别名


 
100
* 想要引入部门的约束文件里面的name,使用部门的别名 detp:元素名称

王晓晓   

你可能感兴趣的:(Java)