约束直接写在xml文档中!
<?xml version="1.0" encoding="UTF-8"?>
<!--
DTD约束
-->
<!DOCTYPE students [
<!ELEMENT students (student)>
<!ELEMENT student (#PCDATA)>
]>
<students>
<student>你好!</student>
</students>
格式良好的xml文档必须且仅有一个根元素!
元素属性
l 属性由属性名与属性值构成,中间用等号连接;
l 属性值必须使用引号括起来,单引或双引;
l 定义属性必须遵循与标签名相同的命名规范;
l 属性必须定义在元素的开始标签中;
一个元素中不能包含相同的属性名;
DTD定义元素
1 定义元素的语法
使用ELEMENT声明元素:<!ELEMENT元素名 内容类型或内容>
例如:<!ELEMENT name (#PCDATA)>
表示name元素的内容为文本数据
2 元素类型
元素类型可以是ANY或EMPTY
EMPTY
<?xml version="1.0" encoding="UTF-8"?>
<!--
DTD约束
-->
<!DOCTYPE students [
<!ELEMENT students (student)>
<!ELEMENT student EMPTY>
]>
<students>
<student></student>
</students>
ANY
<?xml version="1.0" encoding="UTF-8"?>
<!--
DTD约束
-->
<!DOCTYPE students [
<!ELEMENT students (student)>
<!ELEMENT student ANY>
]>
<students>
<student>如果约束中是ANY的时候,元素中可以为任何内容!</student>
</students>
<!ELEMENTstu ANY>:表示stu元素的内容可以是任意元素,也可以是文本数据,也可以是文本数据+子元素,反正就是任意。
<!ELEMENTstu EMPTY>:表示stu不能有任何内容,即空元素。例如:<stu/>。
3 元素内容
元素内容可以是文本数据,也可以是子元素
<!ELEMENT stu (#PCDATA)>表示stu元素内容为文本,例如:<stu>hello</stu>
<!ELEMENT stu(name)>表示stu元素内容为name子元素,例如<stu><name></name><stu>,但要注意,如果<name>元素没有声明,那么就会出错。
4 子元素出现次数
可以使用“?”、“*”、“+”来指定子元素的出现次数
<!ELEMENTstu (name?)>表示stu元素可以有0~1个name子元素,即name子元素可有可无。
<!ELEMENTstu(name*)>表示stu元素可以有0~n个name子元素;
<!ELEMENTstu(name+)>表示stu元素可以有1~n个name子元素。
5 多个子元素
<!ELEMENT stu (name,age,sex)>表示stu必须有三个子元素,分别是name、age、sex,并且子元素出现的顺序也要与声明的顺序一致。
6 枚举子元素
<!ELEMENT stu (name| age | sex)表示stu只有一个子元素,可以是name、age、sex中的任意一个。
7 复合声明1
<!ELEMENT stu(name | age | sex)?>表示stu元素可以有0~1个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。
<stu></stu>
<stu><name/></stu>
<stu><age/></stu>
<stu><sex/></stu>
8 复合声明2
<!ELEMENT stu (name| age | sex)*>表示stu元素可以有0~n个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。
<stu></stu>
<stu><name/><name/></stu>
<stu><name/><age/><age/></stu>
<stu><name/><age/><name/><sex/><sex/></stu>
9 复合声明3
<!ELEMENT stu(name | age | sex)+>表示stu元素可以有1~n个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。
<stu><age/></stu>
<stu><name/><name/></stu>
<stu><name/><age/><age/></stu>
<stu><name/><age/><name/><sex/><sex/></stu>