1 / 34

第 3 章 XML 文档类型定义 ---- DTD

第 3 章 XML 文档类型定义 ---- DTD. 目标. 理解文档类型定义 DTD 声明 元素声明 属性声明 实体声明. XML 确认 ---- 确保 XML 文档中数据的一致性. 符合语法的 XML 文档称为结构良好的 XML 文档。 通过 DTD 验证的 XML 文档称为有效的 XML 文档。. 3.1 DTD 概述. 文档类型定义 --Document Type Definition DTD 用来描述 XML 文档的结构, DTD 定义了 XML 文档中可用的合法元素。

kedma
Download Presentation

第 3 章 XML 文档类型定义 ---- DTD

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第3章 XML文档类型定义---- DTD

  2. 目标 • 理解文档类型定义 • DTD声明 • 元素声明 • 属性声明 • 实体声明

  3. XML 确认----确保XML文档中数据的一致性 • 符合语法的XML文档称为结构良好的XML文档。 • 通过DTD验证的XML文档称为有效的XML文档。

  4. 3.1 DTD概述 • 文档类型定义--Document Type Definition • DTD用来描述XML文档的结构, DTD定义了XML文档中可用的合法元素。 • 用DTD 指定:可以在文档中存在的元素、元素可以具有的属性、在元素内部元素的层次结构以及元素在整个文档中出现的顺序。

  5. 3.2 DTD声明 • DTD可以是一个完全独立的文件,也可以在XML文件中直接设定。 • DTD分为外部DTD(在XML文件中调用另外已经编辑好的DTD)和内部DTD(在XML文件中直接设定DTD)两种。

  6. 3.2.1 内部DTD • 内部DTD是在XML文件的文件序言区域中定义的。 内部DTD的XML文档的结构为: < ?xml version = "1.0" ?>< !DOCTYPE 根元素名[ 元素描述 ]> 文档数据区.......

  7. 3.2.1 内部DTD(续) <?xml version='1.0' encoding='gb2312'?> <!DOCTYPE poem[ <----------------根元素的名称 <!ELEMENT poem (author,title,content) > <-----------子元素的名称及顺序 <!ELEMENT author (#PCDATA)> <------------------子元素的数据类型 <!ELEMENT title (#PCDATA)> <!ELEMENT content (#PCDATA)> ]> <------------------------结束标签 <poem> <author>王维</author> <title>鹿柴</title> <content>空山不见人,但闻人语声. 返景入深林,复照青苔上. </content> </poem> 内部DTD示例 注意:例中的定义关键字一定要大写,如DOCTYPE、ELEMENT、#PCDATA,且元素名称与数据类型之间也要有空格。

  8. 3.2.2 外部DTD • 外部DTD是一个独立于XML文件的文件,实际上也是一个文本文件,只是使用.dtd为文件扩展名。 • 外部DTD的好处是:它可以方便高效地被多个XML文档所共享。 • 外部DTD的创建方式、语法和内部DTD是一样的。

  9. 3.2.2 外部DTD (续2-1) • 使用外部DTD的XML文档的结构为: < ?xml version = "1.0"?> < !DOCTYPE 根元素名SYSTEM/ PUBLIC "外部DTD文件名及其位置"> 文档数据区.......

  10. 3.2.2 外部DTD (续2-2) <? xml version='1.0' encoding='gb2312' ?> <!DOCTYPE poem SYSTEM "ex2.dtd"> <poem> <author>王维</author> <title>鹿柴</title> <content>空山不见人,但闻人语声.返景入深林,复照青苔上.</content> </poem> 外部DTD使用示例 <?xml version="1.0" encoding="gb2312"?> <!ELEMENT poem (author,title,content)> <!ELEMENT author (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT content (#PCDATA)>

  11. 3.3 DTD语法 • 一个DTD文档包含 • 元素(ELEMENT)的定义规则 • 元素之间的关系规则 • 属性(ATTLIST)的定义规则 • 可使用的实体(ENTITY)或符号(NOTATION)规则

  12. 3.3.1元素声明——确定元素及其类型 • 元素有三种不同的类型 • 数据型(即字符内容) • <Text>Hello</Text> • 元素型(即包含的内容是元素) • <Letter> • <sub>QUIT</sub> • <Body>Hello everybody!</Body> • </Letter> • 混合型(包含的内容既有元素又有内容) • <para> • Hello everybody • <bold>quit</bold> • </para>

  13. 3.3.1元素声明——元素的定义(1/5) • 语法 <!ELEMENTNAMECONTENT> 关键字 元素名称 元素类型 EMPTY-该元素不能包含子元素和文本,但可以有属性-(空元素) ANY-该元素可以包含任何在DTD中定义的元素内容 #PCDATA-可以包含任何字符数据,但是不能在其中包含任何子元素 PCDATA代表字符数据,为防止与关键字混淆,加#前缀 纯元素类型--只包含子元素,并且这些子元素外没有文本 混合类型--包含子元素和文本数据的混合体

  14. 3.3.1元素声明——元素的定义(2/5) • EMPTY示例--空元素 <!ELEMENT人 EMPTY> XML示例: <家庭> <人 名字="皮诺曹" 性别="男" 年龄="6"/> </家庭> <家庭> <人>皮诺曹</人> <人><大人>皮诺曹爸爸</大人></人> </家庭> √ ×

  15. 3.3.1元素声明——元素的定义(3/5) • ANY示例 <!ELEMENT人 ANY> XML示例: <家庭> <人>皮诺曹</人> <人><大人>皮诺曹爸爸</大人></人> </家庭> • 将根元素设为ANY类型后,元素出现的次数和顺序不受限制。

  16. 3.3.1元素声明——元素的定义(4/5) • #PCDATA示例 <!ELEMENT人 (#PCDATA)> <家庭> <人 性别="男" 年龄="6">皮诺曹</人> </家庭> <家庭> <人><大人>皮诺曹爸爸</大人></人> </家庭> √ XML 示 例: ×

  17. 3.3.1元素声明——元素的定义(5/5) • 组合类型示例 <!ELEMENT家庭 (人+, 家电*)> XML示例: <家庭> <人 名字="郭大路" 性别="男" 年龄="25"/> <人 名字="李寻欢" 性别="男" 年龄="38" 爱好="作个教育家和伟人"/> <家电 名称="彩电" 数量="3"/> </家庭>

  18. 注意1: • 在元素设置中,如果元素包含多个子元素,如:〈!ELEMENT 书籍(名称,作者,价格)〉这种含多个子元素的声明,那么“名称”、“作者”、“价格”这些标记在XML文件中必须以上面排列的顺序出现,每个标记必须而且只能够出现一次。

  19. 注意2: • 如果在设定元素时,按照〈!ELEMENT 书籍ANY〉,这样在元素下就可以包含任意被设定过的元素,出现的次数和顺序也不受限制,并且在该元素下,除了可以包含子元素以外,还能够包含一般的文字。

  20. 注意3: • 在XML文件中,一个标记可能多次出现(或者不出现),除了在它们的父元素中用ANY关键字之外,还可以在元素的旁边加上特定的符号来控制标记出现的次数。

  21. 修饰符号------无符号:只能出现一次

  22. 3.3.2属性声明 在DTD中定义属性时,我们使用下面的格式来给一个元素定义一组合适的属性,同时指定这些属性的类型和缺省值: <!ATTLIST 元素名(属性名 值类型 [属性类型] [“缺省值“])> 其中: • 元素名是属性所属的元素的名字。 • 属性名是属性的命名。 • 值类型是给属性分配的值。 • 缺省值是属性的初值。

  23. 属性的定义 • 语法 <!ATTLIST元素名称 属性名称 类型 属性特点 …... > CDATAIDIDREF/IDREFSNMTOKEN/NMTOKENSEnumerated #REQUIRED#IMPLIED#FIXED valueDefault value

  24. 属性类型- CDATA • 属性值可以是任何字符(包括数字和中文) <!ATTLIST 木偶 姓名 CDATA #REQUIRED> XML示例: <木偶 姓名="皮诺曹"/><木偶 姓名="Pi Luocao"/><木偶 姓名="123"/>

  25. 属性类型-NMTOKEN/NMTOKENS • NMTOKEN是CDATA 的一个子集,表示属性值必须是英文字母、数字、句号、破折号、下划线或冒号(不能是中文!)。 • NMTOKENS与NMTOKEN类似,包含多个由空格分隔的字符。 XML示例: <?xml version="1.0" encoding="gb2312" ?> <!DOCTYPE poems[ <!ELEMENT poems (title,content)> <!ELEMENT title (#PCDATA)> <!ATTLIST title author NMTOKEN #REQUIRED> <!ELEMENT content (#PCDATA)> ]> <poems> <title author="杜甫">八阵图</title> <content> 功盖三分国,名成八阵图, 江流石不转,遗恨失吞吴. </content> </poems> <?xml version="1.0" encoding="gb2312" ?> <!DOCTYPE poems[ <!ELEMENT poems (title,content)> <!ELEMENT title (#PCDATA)> <!ATTLIST title author NMTOKEN #REQUIRED> <!ELEMENT content (#PCDATA)> ]> <poems> <title author="dupu">八阵图</title> <content> 功盖三分国,名成八阵图, 江流石不转,遗恨失吞吴. </content> </poems> × √

  26. 属性类型- ID • 表明该属性的取值必须是唯一的。该ID必须以一个字母开头 <!ELEMENT 公司职员 ANY><!ATTLIST 公司职员 编号 ID #REQUIRED姓名 CDATA #REQUIRED> ID属性值必须是合格的XML名字 XML示例: <公司职员 编号="Z001" 姓名="张三"/> <公司职员 编号="Z002" 姓名="李四"/> √ <公司职员 编号="Z001" 姓名="张三"/> <公司职员 编号="Z001" 姓名="李四"/> ×

  27. 属性类型- IDREF/IDREFS • IDREF属性的值指向文档中其它地方声明的ID类型的值。 • IDREFS同IDREF,但是可以具有由空格分开的多个引用。 <!ELEMENT 家庭 (人+)><!ELEMENT 人 EMPTY><!ATTLIST 人relID ID #REQUIRED parentID IDREFS #IMPLIED name CDATA #REQUIRED> <家庭> <人 relID="P_1" name="爸爸"/> <人 relID="P_2" name="妈妈"/> <人 relID="P_3" parentID="P_1 P_2" name="儿子"></家庭> 空格 XML示例

  28. 属性类型-Enumerated • 事先定义好一些值,属性的值必须在所列出的值的范围内。 <!ATTLIST person 婚姻状态 (single|married|divorced|widowed) #IMPLIED> <!ATTLIST persion 性别 (男|女) #REQUIRED>

  29. 属性的特点-#REQUIRED • 元素的所有实例都必须有该属性的值(NOT NULL) • 语法: <!ATTLIST 元素名 属性名 属性类型#REQUIRED> • DTD 示例: <!ATTLIST person number CDATA #REQUIRED> • XML 示例: <person number="5677" />

  30. 属性的特点-#IMPLIED • 元素的实例中可以忽略该属性(NULL)。 • 语法: <!ATTLIST 元素名 属性名属性类型#IMPLIED> • DTD示例: <!ATTLIST contact fax CDATA #IMPLIED> • XML示例: <contact fax="555-667788" />

  31. 属性的特点-#FIXED value • 元素实例中该属性的值必须为指定的固定值。在元素中不能够设定该属性,因为这个属性被设为具有固定值的属性(#FIX关键字) • 语法: <!ATTLIST 元素名 属性名 类型#FIXED "value"> • DTD示例: <!ATTLIST sender company CDATA #FIXED "Microsoft"> • XML示例: <sender company="Microsoft" />

  32. 属性的特点-Default value • 为属性提供一个默认的值 • 语法: <!ATTLIST 元素名 属性名 类型"value"> • DTD示例: <!ATTLIST payment type CDATA "check"> • XML示例: <payment type="check" />

  33. 定义实体-内部实体 • 作用:避免重复输入 - (宏、变量) • XML中五个预定义实体 • 自定义实体语法: <!DOCTYPE 根元素 [ <!ENTITY 实体名"实体内容"> ]> • 引用已定义的实体: &实体名;

  34. 3.4 本章小结 • 在本章中,我们学习了如何使用DTD来描述文档结构,包括文档包含的必需元素、属性和任选元素、属性,以及元素间的相关关系和自定义实体。特别学习了以下内容: • 文档类型定义(DTD)提供了XML文档所包含的元素、属性和实体及相互关系的定义。 • 内部DTD和外部DTD • 元素类型声明:声明元素名称和子元素。 • 如何在DTD中声明元素的属性 • 如何从内部和外部实体开始创建XML文档

More Related