XML 约束_定义元素
DTD 定义元素
1、定义元素的语法
- 使用 ELEMENT 声明元素
例如<!ELEMENT 元素名 内容类型或内容>
<!ELEMENT name (#PCDATA)> <!-- 表示 name 元素的内容为文本数据-->
2、元素类型
- 元素类型可以是 ANY 或 EMPTY
<!ELEMENT stu ANY> <!-- 表示 stu 元素的内容可以是任意元素,也可以是文本数据,也可以是文本数据+子元素,反正就是任意-->
<!ELEMENT stu EMPTY> <!--表示 stu 不能有任何内容(包括空格),即空元素-->
3、元素内容
- 元素内容可以是文本数据,也可以是子元素
<!ELEMENT stu (#PCDATA)> <!--表示 stu 元素内容为文本-->
<!ELEMENT stu (name)> <!--表示 stu 元素内容为 name 子元素,但要注意,如果 <name> 元素没有声明,那么就会出错-->
4、子元素出现次数
- 可以使用 “?”、“*”、“+” 来指定子元素的出现次数
<!ELEMENT stu (name?)> <!--表示 stu 元素可以有 0~1 个 name 子元素,即 name 子元素可有可无--> <!ELEMENT stu(name*)> <!--表示 stu 元素可以有 0~n 个 name 子元素--> <!ELEMENT stu(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 其中的一个-->
8、复合声明 2
- 示例
<!ELEMENT stu (name | age | sex)*> <!--表示 stu 元素可以有 0~n 个(name | age | sex),而(name | age | sex)表示 name、age、sex 其中的一个-->
9、复合声明 3
- 示例
<!ELEMENT stu (name | age | sex)+> <!--表示 stu 元素可以有 1~n 个(name | age | sex),而(name | age | sex)表示 name、age、sex 其中的一个-->
10、练习
- 根据上面 DTD 写 xml 文档
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 课件 [ <!ELEMENT 章节 (简介,(标题,(段落 | 图片 | 表格 | 说明)+)+)> <!ELEMENT 简介 (#PCDATA)> <!ELEMENT 标题 (#PCDATA)> <!ELEMENT 段落 (#PCDATA)> <!ELEMENT 图片 (#PCDATA)> <!ELEMENT 表格 (#PCDATA)> <!ELEMENT 说明 (#PCDATA)> <!ELEMENT 课件 (章节+)> ]> <课件> <章节> <简介>水浒传是一部农民起义的故事</简介> <标题>水浒传第三回景阳冈</标题> <段落>武松来到景阳冈...</段落> <说明>作者:施耐庵</说明> </章节> <章节> <简介>水浒传是一部农民起义的故事</简介> <标题>宋三郎怒杀阎婆惜</标题> <段落>那日....</段落> <表格></表格> </章节> </课件>
如有错误,欢迎指正!