DTD 约束可以作为一个单独的文件编写,也可以在xml文件内编写
(xml与DTD是严格区分大小写的)
DTD可以定义和约束对应的xml标签和属性
标签的定义:
<!DOCTYPE 根元素 [
具体内容
]>
如:
<?xml version="1.0" encoding="UTF-8"?>
<!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>
]>
<persons>
<person>
<name>张小明</name>
<age>10</age>
<contact>
<phone>1234567</phone>
<email>123@qq.com</email>
</contact>
<br/>
</person>
<person>
<name>张大明</name>
<age>35</age>
<contact>
<phone>1234567</phone>
<email>123@qq.com</email>
</contact>
</person>
</persons>
属性的定义:
<!DOCTYPE 根元素 [
<!ATTLIST 对应的元素
具体内容
>
]>
如:
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<!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>
<email>123@qq.com</email>
</contact>
<br/>
</person>
<person pid="p2">
<name>张大明</name>
<age>35</age>
<contact>
<phone>1234567</phone>
<email>123@qq.com</email>
</contact>
</person>
</persons>
<!!注意!!>
元素定义:
?:表示该对象可以出现,但只能出现一次
* : 表示该对象允许出现任意次数,也可以是零次
+ : 表示该对象最少出现一次,可以出现多次
() : 用来给元素分组
| :表明在列出的对象中选择一个
, : 表示对象必须按指定的顺序出现
元素内容的类型:
#PCDATA:表明该元素可以包含任何字符数据,但是不能在其中包含任何子元素(不能嵌套标签)
EMPTY: 如果一个元素的CONTENT被声明为EMPTY的话,表示该元素不能包含任何子元素和文本,只可以使用属性
ANY: 表示该元素中可以包含任何在DTD中定义的元素
属性类型及含义:
(ATTLIST:ATT是attribute的缩写,LIST是集合的意思)
CDATA : 值为字符数据
ID : 值为唯一的id
IDREF : 值为另外一个元素的id
IDREFS : 值为其他id的列表
NMTOKEN : 值为合法的xml名称
NMTOKENS : 值为合法的xml名称的列表
ENTITY :值是一个实体
ENTITIES : 值是一个实体的列表
NOTATION : 此值是符号的名称
xml: : 值是一个预定义的xml值