1. 为什么需要xml约束?
举个例子,我现在定义了一个person的文件来保存人的相关信息,比如name age 等,但是如果在这个文件中写了一个标签<猫>,虽然这个是可以正常显示,但是这个并不是人的信息,由于标签是自定义的,所以我们需要技术来约束xml中出现的元素。
2.两种约束:DTD约束和schema约束
2.1 DTD约束:(一般使用步骤如下)
1)创建一个.dtd 文件
2)看xml中有几个元素(标签),在dtd文件中就写几个<!ELEMENT>
3) 判断元素是复杂元素(有子元素)还是简单元素(无子元素):
- 复杂元素:<!ELEMENT 元素名称 (子元素)>
- 简单元素:<!ELEMENT 元素名称 (#PCDATA)>
4)需要在xml中引入改dtd文件,
<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">
注意:如果直接使用浏览器打开xml文件,浏览器只是校验xml的语法,并不会校验约束。我们需要用到一些IDE开发工具(eclipse/myeclipse/idea)等
2.2 DTD引入方式有三种:
1)引入外部的DTD文件
<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">
2)使用内部的dtd文件
<!DOCTYPE 根元素名称 [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST name
id CDATA #REQUIRED
>
]>
- 使用外部的dtd文件(即网络上的dtd文件)
<!DOCTYPE 根元素名称 PUBLIC "dtd名称" "DTD文档的url">
2.3 DTD定义属性
<!ATTLIST name
id CDATA #REQUIRED
>
- 定义:<!ATTLIST 元素名称 属性名称 属性类型 属性的约束 >
- 属性类型:
类型 | 符号 |
---|---|
字符串 | CDATA |
枚举 | (例1|例2|例3) |
字母或下划线开头,不能有空格 | ID |
- 属性的约束
约束 | 符号 |
---|---|
必填 | #REQUIRED |
可有可无 | #IMPLIED |
固定值 | #FIXED |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
<!ELEMENT person (name*,age+,birthday*)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT birthday (#PCDATA)>
<!ATTLIST name
id CDATA #IMPLIED
style ID #IMPLIED
color (red|greed) #REQUIRED
width CDATA #FIXED '90'
>
<!ATTLIST age
id2 CDATA #REQUIRED >
]>
<person>
<name id="1" color="red" style="heigh:30px" width="90">张三</name>
<age id2="zs">30</age>
</person>