DTD文件约束以及使用
今天我们来学习一下dtd的使用以及约束。
我们来说一下什么是有效的xml文档?
内容结构严谨遵守自身标记,能通过自身的语法检查,通过dtd验证的xml文档称为有效的xml文档。
DTD
Schema
两者都可以用来约束xml文档,Schema 比dtd强大同时难度也比dtd高一点,我们只要学习好dtd然后去看Schema 是轻轻松松的。
什么是格式良好的xml?
(1)有且只有一个根元素
(2)XML标签大小写正确区分
(3)正确使用结束标签
(4)正确嵌套标签
(5)使用了合法的标签名(A-Za-z0-9-_)
(6)定义有效的属性
1.声明dtd
格式: <!DOCTYPE 根元素名[]>
2.元素定义的语法
语法格式<!ELEMENT 元素名称 元素约束>
元素类型 | 解释 |
---|---|
<!ELEMENT element-name EMPTY> | 空元素 |
<!ELEMENT element-name (#PCDATA)> | 文本元素 |
<!ELEMENT element-name (e1,e2...)> | 混合元素 |
3.元素的限制
元素 | 解释 |
---|---|
, | 顺序 |
| | 或 |
+ | 1~(次) |
* | 0~n(次) |
? | 0或1 |
(如果没有) | (默认是一次) |
4.属性定义的语法
格式: <!ATTLIST 元素名 属性名 属性类型/>
语法 | 解释 |
---|---|
ID | 唯一非空 ,类似于数据库中的主键 |
(男|女) “男” | 举枚,默认男的意思 |
CDATA | 纯文本 |
IDREF | 属性值引用已定义的ID值(相当于主键引用外键) |
#REQUIRED | 必须 <!ATTLIST 元素名 属性名 属性类型 #REQUIRED/> |
#IMPLIED | 非必须 <!ATTLIST 元素名 属性名 属性类型 #IMPLIED/> |
5.XML中的特殊符号
符号 | 解释 |
---|---|
& amp; | &(逻辑与) |
& lt; | <(小于) |
& gt; | >(大于) |
& quot; | "(双引号) |
& apos; | '(单引号) |
注:
&:在xml里面是一个特殊字符:用来取变量的开始
;:在xml里面是一个特殊字符:用来取变量的结束
相当于:
amp=&
& amp;
6.外部dtd
dtd三种引入方式:
(1)引入外部的dtd文件
< !DOCTYPE 根元素名称 SYSTEM “dtd文件路径”>
(2)引入内部的dtd文件
< !DOCTYPE 根元素名称 [dtd代码]>
(3)使用外部的dtd文件(网络上的)
< !DOCTYPE 根元素名称 PUBLIC “DTD名称” “DTD文档的URL”>
话不多说上代码
2.1内部dtd
<?xml version="1.0" encoding="UTF-8"?>
<!-- 内部dtd -->
<!DOCTYPE persons [
<!ELEMENT persons (person*)>
<!ELEMENT person (name,age,contact,br?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT contact (phone|email)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT br EMPTY>
<!ELEMENT email (#PCDATA)>
<!ATTLIST person
pid ID #REQUIRED
sex (男|女) "男"
qq CDATA #IMPLIED
parent IDREF #IMPLIED
>
]>
<persons>
<person pid="p1" sex="男" qq="aaa" parent="p2">
<name>张小明</name>
<age>10</age>
<contact>
<phone>1234567</phone>
</contact>
<br/>
</person>
<person pid="p2">
<name>张大明</name>
<age>35</age>
<contact>
<email>@qq.com</email>
</contact>
</person>
</persons>
2.2引用外部dtd
<?xml version="1.0" encoding="UTF-8"?>
<!-- 外部dtd -->
<!DOCTYPE persons SYSTEM "demo4.dtd">
<persons>
<person pid="p1" sex="男" qq="aaa" parent="p2">
<name>张小明</name>
<age>10</age>
<contact>
<phone>1234567</phone>
</contact>
<br/>
</person>
<person pid="p2">
<name>张大明</name>
<age>35</age>
<contact>
<email>@qq.com</email>
</contact>
</person>
</persons>