1,为什么需要XML约束;
比如我们定义一个人的XML文件,里面包括人的元素姓名、年龄、性别等,但是如果你
写入猫这个元素的时候,运行XML可以正常显示。但是猫不是属于人所属的元素,不符合
人的现实关。所以这时候就需要XML约束来约束文档人的元素。
2,XML约束技术:DTD约束和schema约束
3,DTD约束
(1):实现DTD约束
a:创建一个后缀名为.dtd的文件
b:看XML文档中有几个元素,DTD文档就写几个<!ELEMENT>
c;判断元素是简单元素还是复杂元素,简单元素没有子元素,复杂元素有子元素或者孙元素。
-简单元素:<!ELEMENT (#PCDATA)>
-复杂元素:<!ELEMENT 元素名称 (子元素名称一,子元素名称二)>
注:元素名称和冒号间有空格
d:引用dtd文件:<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">
注;在浏览器打开是是看不出来约束的,浏览器只是负责校验XML但是不能校验DTD,
所以这是需要工具eclipse。
4、dtd的三种引入方式
(1)引入外部的dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
(2)使用内部的dtd文件
- <!DOCTYPE 根元素名称 [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
(3)使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
- 后面学到框架 struts2 使用配置文件 使用 外部的dtd文件
- <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
5、使用dtd定义元素
* 语法: <!ELEMENT 元素名 约束>
* 简单元素:没有子元素的元素
<!ELEMENT name (#PCDATA)>
*** (#PCDATA): 约束name是字符串类型
*** EMPTY : 元素为空(没有内容)
- <sex></sex>
*** ANY:任意
* 复杂元素:
<!ELEMENT person (name,age,sex,school)>
- 子元素只能出现一次
* <!ELEMENT 元素名称 (子元素)>
* 表示子元素出现的次数
+ : 表示一次或者多次
? :表示零次或者一次
* :表示零次或者多次
* 子元素直接使用逗号进行隔开 ,
** 表示元素出现的顺序
* 子元素直接使用|隔开
** 表示元素只能出现其中的任意一个
6、使用dtd定义属性
* 语法: <!ATTLIST 元素名称
属性名称 属性类型 属性的约束
>
* 属性类型
- CDATA: 字符串
- <!ATTLIST birthday
ID1 CDATA #REQUIRED
>
- 枚举 : 表示只能在一定的范围内出现值,但是只能每次出现其中的一个
** 红绿灯效果
** (aa|bb|cc)
- <!ATTLIST age
ID2 (AA|BB|CC) #REQUIRED
>
- ID: 值只能是字母或者下划线开头
- <!ATTLIST name
ID3 ID #REQUIRED
>
* 属性的约束
- #REQUIRED:属性必须存在
- #IMPLIED:属性可有可无
- #FIXED: 表示一个固定值 #FIXED "AAA"
- 属性的值必须是设置的这个固定值
- <!ATTLIST sex
ID4 CDATA #FIXED "ABC"
>
- 直接值
* 不写属性,使用直接值
* 写了属性,使用设置那个值
- <!ATTLIST school
ID5 CDATA "WWW"
>
7:,定义实体
<!ENTITY 实体 “内容”>
XML引用:&实体
实体的定义要定义在dtd文件内,如果不定义在dtd文件内
,有些浏览器不显示;