XML

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 课件 (章节+)>
    ]>
    <课件>
    <章节>
    <简介>水浒传是一部农民起义的故事</简介>
    <标题>水浒传第三回景阳冈</标题>
    <段落>武松来到景阳冈...</段落>
    <说明>作者:施耐庵</说明>
    </章节>
    <章节>
    <简介>水浒传是一部农民起义的故事</简介>
    <标题>宋三郎怒杀阎婆惜</标题>
    <段落>那日....</段落>
    <表格></表格>
    </章节>
    </课件>

如有错误,欢迎指正!