第3章 DTD规范XML文档(1)
第3章 文档类型定义(DTD)
3.6 小结
本章主要学习了DTD的基本概念和语法,包括在XML 中声明DTD的方式,使用DTD声明元素、属性列表和实体等 的方式。如何使用DTD来描述和约束文档结构是本章的主旨 。另外,本章还粗略地讲述了XML Schema开发和XML命 名空间的基础知识。
3.3 实体和外部DTD子集
实体(ENTITY)是一种替代物,用于内容转义,在 XML文档中可以直接用实体名来代替实体值使用。实体可以 定义在文档的前序部分,也可以定义在DTD中。 内部实体完全在文档有效空间内部定义,内部实体的 值在DTD文档内部或DOCTYPE声明中声明;外部实体是在 XML文档外部定义的实体,实体的值在外部资源中声明。 已解析实体的值经过XML解析器解析,成为XML或 DTD的一部分,如字符、数字和文本对象等;未解析实体的 值未经XML解析器解析,可以是二进制数据,如图片、声音 等。
3.5.3 命名空间的使用
声明了命名空间,有了命名空间下的合法名称,就可 以使用命名空间来区别具有相同名称的元素和属性了。命名 空间的使用方法是在属于该名称空间的元素或属性名称前添 加前缀和冒号“:”,表示其所属的名称空间。
3.5.4 DTD与命名空间
在命名空间声明中,命名空间名其目的在于标识特定 的命名空间。XML解析器遇到一个命名空间声明后,就把等 号左边的命名空间前缀和右边的命名空间名绑定在一起,对 于后面使用了该前缀的合法名称,都可以归属于同一个命名 空间中。根据DTD进行有效性检测时,也并不是把这个命名 空间映射到URI所指的DTD文件,而是去找所有在 DOCTYPE中声明的内部和外部的DTD,看其所定义的哪一 个元素或属性名与文档中用到的元素或属性名相同。
3.1.7 在文档间共享通用的DTD
为方便多个文档共享同一个DTD,可以将DTD单独定 义在一个文件中。XML文档只要添加对DTD文件的引用就 可以起到文档内DTD的作用了。这样,多个XML文档就可 共享同一个DTD文件了。
XML基础教程第3章
3.2.2 不同元素类型的声明
1.基本字符元素声明 XML文档中的基本元素是指那些含有字符数据,而不含任何子 元素的元素。 在相应的DTD中,声明基本字符元素的具体格式如下: <!ELEMENT 元素名称 (#PCDATA)> 这里的PCDATA是指可解析字符数据,小括号和PCDATA前面的 “#”不能省略。
对上述说明举例如下:
(1)例子共定义了标题、型号、价格和品牌4个基本元素, 也就是不包含其他元素的元素,这些元素的内容均为字符数据, 由“(#PCDATA)”指明;其中PCDATA为可解析数据。
(2)语句“<!ELEMENT 计算机 (品牌,型号,价格)>”定义 了一个名为&l号>和<价格 >3个子元素,而且子元素出现的顺序必须是<品牌>子元素在最 前,接着是<型号>子元素,最后是<价格>子元素。
3.1.1 DTD简介
DTD是用来描述XML文档结构的一种常见方法,用来定义文 档的逻辑结构。一个有效的XML文档应该是一个符合相应DTD验 证的XML文档。有了统一制定的DTD,XML解析器就能够依据DTD 来验证这类XML文档的结构和数据是否正确有效,并能正确解 析。
除此之外,DTD还有以下作用:
1
用来验证XML文档数据的有效性。
2
统一某行业或组织联盟的XML文档的格式 和结构。
3
能够保证在一定范围内,交流和共享 XML文档数据。
为应用程序员提供XML文档逻辑
4
结构的参考。
3.1.2 DTD的基本结构
DTD用来对XML文档所使用的元素、元素间的关系、 元素可用的属性以及可使用的实体等定义规则。实际 上,DTD是由若干条元素、属性、实体等的定义和声明 语句组成的。
使用DTD规范XML文档
Page 11
3.2.2 各种元素的声明
1.基本字符元素的声明 2.含子元素的严格声明 3.包含任意内容的声明 4.子元素出现次数的声明 5.选择性子元素的声明 6.空元素的声明 7.混合型元素的声明 8.实体的声明
Page 12
1.基本字符元素的声明
Page 16
5.选择性子元素的声明
语法:<!ELEMENT 元素名称 使用规则> 语法:<!ELEMENT 元素名称 (子元素)> (子元素):指示元素中包含的子元素 1如果子元素用“|”分开,说明任选其一。
Page 17
6.空元素的声明
语法:<!ELEMENT 元素名称 使用规则> EMPTY:指示元素的不能有主体内容。 <!ELEMENT 元素名称 EMPTY >
语法:<!ELEMENT 元素名称 使用规则> <!ELEMENT 元素名称 (#PCDATA) > 指示元素的主体内容只能是普通的文 本.(Parsed Character Data)
Page 13
2.含子元素的严格声明
语法:<!ELEMENT 元素名称 使用规则> <!ELEMENT 元素名称 (子元素)> (子元素):指示元素中包含的子元素 如果子元素用逗号分开,说明必须按照声明 顺序去编写XML文档 <!ELEMENT 元素名称 (子元素1,子元素2,子 元素3,…)>
Page 19
要宣告混合内容的元素型态,你可以使用下列两 种内容模型格式的任何一种: 1 只有字符数据 。要宣告只包含字符数据的元 素型态,使用内容模型(#PCDATA)。例如, 下面的宣告让SUBTITLE 元素只能包含字符数据: <!ELEMENT SUBTITLE (#PCDATA)> 根据这个宣告,下面两个元素都是有效的: <SUBTITLE>A New Approach</SUBTITLE> <SUBTITLE></SUBTITLE>
第3章之DTD规范
说明:
在ATTLIST声明中,涉及到“属性名称”“属性类 型”和“默认值情况”,其意义分别阐述如下: (1)属性名称 属性名称的命名规则和标记的命名 规则相同,可以由字母、数字、下划线(“_”)、 点(“.”)或连字符(“-”)组成,但必须以字母 或下划线开头。 (2)属性类型
<!ELEMENT 应聘者 (姓名, (奖励|处分)*, (男|女))>
解释:约束标记“应聘者”依次包含若干 个子标记:一个名字是“姓名”的标记。 多个(包括零个)名字是“奖励”或“处 分”的子标记(可以同时有),最后一个 名字是“男”或“女”子标记(不能同时 有)
P37例3-5
例3.5.xml
“<!ATTLIST”为元素的属性定义。有一些元素具有属性,属 性是为了在应用程序对文档进行处理时,提供参数或者控制信 息。元素所有的属性都必须在DTD中进行定义。
“<!- - Writen by Yangling -->”为注释。与文档本体一样, DTD中也可以含有注释。
内部DTD是很有用的,使用起来也很方便,不 会因为找不到DTD文件而苦恼。但是内部DTD 的引用会使XML源文档的长度剧增。 另外,如果多个XML文档的结构相同,那么使 用内部DTD就必须每个XML文档编写一个DTD, 那么就会造成资源的浪费,代价非
<?xml version="1.0" encoding="gb2312" ?> 元素、属性或实体的DTD描述
外部DTD文件示例
<?xml version=“1.0” encoding=“gb2312”?> <!ELEMENT 客户名单 (客户)> <!ELEMENT 客户 (编号,客户地址,姓名,订单)> <!ELEMENT 编号 (#PCDATA)> <!ELEMENT 客户地址 (#PCDATA)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT 订单 (#PCDATA)> <!ATTLIST 客户 种类 CDATA #REQUIRED>
DTD
表3-3
如例
表3-4
属性的类型 ⑴ CDATA属性类型:此种类型的属 性值只能是文本字符串,用CDATA关键字 进行声明。 实例3-2 P59
⑹ <!ELEMENT year (#PCDATA)>
<!ATTLIST year format (numeric | character) #FIXED “numeric”>
⑺ <!ELEMENT year (#PCDATA)>
<!ATTLIST year format (numeric | character) #REQUIRED>
<!DOCTYPE Directory SYSTEM "test.dtd">
内部DTD
P47 外部DTDຫໍສະໝຸດ P483.3 DTD语法元素声明 <!ELEMENT name content> name是元素的名称 content指明元素内容的情况,可能出 现关键词EMPTY、关键词ANY或描述包含 在本元素中的子元素的顺序和重复次数的 内容模型。
(5)混合类型:既包含子元素又包含字符数 据的元素。 混合内容元素的声明采用特定的格式, 以#PCDATA开始,后面是混合内容中可能 出现的子元素类型,每种只需声明一次, 在右括号之后有一个“*”。
<!ELEMENT pick (#PCDATA | one | two | three)*>
再回顾一下前面的例子
⑻ <!ELEMENT year (#PCDATA)> <!ATTLIST year format (numeric | character) #IMPLIED>
第3章在XML文档中使用DTD解读
• 2. Enumerated型
– 如果属性值并不是任意的字符串,而是在 几个可能的值中进行选择,如书籍的“类 别”属性,其值可为“文艺”,也可为 “自然科学”,而不可能为其他情况时, 则可以将书籍的“类别”属性设定为 Enumerated型。
3. ID型 • 当元素的某个属性值是不能重复时,如 书籍的ISBN属性、个人的“身份证号”属 性等,要定义这样的属性则需使用属性的ID 类型。在一个XML文档中,所有元素的ID类 型属性的属性值必须是唯一的,不可重复, 另外,一个元素不能有超过一个ID类型的属 性。
不限定元素内容的声明
• ANY是DTD中使用很频繁的一个关键字, 特别是对于文档根元素的声明。在定义一个 DTD文档时通常很难准确地确定一个元素是 否具有子元素的情况,此时一般的做法是指 定该元素的子元素为ANY型,这样在它之中 可以包含任何数据、任何声明的子元素及其 数据和子元素的组合。 •
ANY元素lt;!DOCTYPE 根元素名称 [定义的内容]> – 其中“[定义的内容]”是用标签<!ELEMENT>定 义,它包括:
• • • • 元素类型声明; 元素属性声明; 实体声明; 记法声明。
3.1 DTD概述
• 内部DTD文件示例
<?xml version="1.0" encoding="gb2312" standalone="yes"?> <!DOCTYPE 持股信息 [ <!ELEMENT 持股信息 (股东)*> <!ELEMENT 股东 (姓名, 武商股份, 神龙电业, 浦发银行, 兴和基金)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT 武商股份 (#PCDATA)> <!ELEMENT 神龙电业 (#PCDATA)> <!ELEMENT 浦发银行 (#PCDATA)> <!ELEMENT 兴和基金 (#PCDATA)> ]>
第3章_文档类型定义.
第三章 文档类型定义(DTD)
湖南大学软件学院 李珩
第三章 文档类型定义(DTD)
XML技术导论
老问题:XML是什么?
XML是一种元标记语言,是一种描述,或者说是定义标记语言的语言。
第二个问题: 如何用XML描述或是定义一个标记语言?
XML通过DTD(Document Type Definitions)来定义一个标记语言
符号
, | ? * +
描述
以指定的顺序“与” “或” 可出现0次或1次 可出现0次或多次 至少出现一次
实例
BOOKNAME,AUTHOR 同时出现,顺序为BOOKNAME在前,AUTHOR在后 BOOKNAME|AUTHOR BOOKNAME或AUTHOR出现,且仅一次 PUBLISHER? 该元素可以不出现,若出现则只能一次 AUTHOR* AUTHOR可不出现,也可以出现任意次 KEYWORD+有一个或多个关键字出现
DTD文件的作用
XML文档要与DTD相比较,这一过程称为合法性检验。如果文档 符合DTD中的约束,这个文档就被认为是合法的,否则就是不合 法的。 DTD为应用程序、组织和兴趣团体提供了共同遵循的方法,同时 也以文档形式阐述了标记标准并强制遵守此标准。
第三章 文档类型定义(DTD)
XML技术导论
第三章 文档类型定义(DTD)
XML技术导论
DTD中的元素内容模型
PRICE,KEYWORD+,PROVIDERID,QUANTITY)>
例 <!ELEMENT BOOK (BOOKNAME, AUTHOR*, PUBLISHER?,
元素内容模型中的符号
第三章 XML语法检 查DTD
DTD的属性声明
2、枚举类型 枚举类型并不需要使用一个关键字,它只 是将所有的属性列举出来,并以竖线分隔。枚 举类型的每一个可能值都必须遵循XML的名称 命名规则,然后就可以从这些值中选出一个作 为属性值。 例:<!- - DTD部分 - - > <!ATTLIST PET HOTSELL (TRUE|FALSE) “FALSE” > <!- - 文件元素部分- - > <PET HOTSELL = “TRUE”>热卖中!</PET>
DTD的属性声明
3、NMTOKEN类型 NMTOKEN规定属性值必须是正确的XML名称 (即必须以字母或下划线开头,后面的字符可 以为字母、数字、下划线、连字符和点号,但 不可包含空格)。 如: <!- - DTD部分 - - > <!ATTLIST CUSTOMER COUNTRY NMTOKEN #REQUIRED > <!- - 文件元素部分- - > <CUSTOMER COUNTRY=“CHN”>…… </CUSTOMER>
DTD的元素声明
3、声明空元素的声明格式: <!ELEMENT 元素名 EMPTY> • 该结构当声明的XML文档元素的内容为空时, 有效。如: <!- - DTD部分 - - > <!ELEMENT 位置 EMPTY> <!- - 文件元素部分- - > <位置></位置>
DTD的元素声明
4、声明自由类型元素的格式: <!ELEMENT 元素名 ANY> • 元素的内容可以是任何数据: 任何被声明过的元素,元素出现的顺序和次数不 受限制; 文本内容或CDATA段 例:example3.xml 5、混合类型 若某元素既包含子元素又包含已编译的字符数据,则 该元素具有混合内容。其声明的语法如下: <! ELEMENT pick (#PCDATA | one | two | three)*>
第3章 XML文档类型定义---- DTD
属性的定义
• 语法
„... >
CDATA ID IDREF/IDREFS
NMTOKEN/NMTOKENS
<!ATTLIST 元素名称
属性名称
类型
属性特点
#REQUIRED #IMPLIED #FIXED value Default value
Enumerated
25
属性类型- CDATA
• 属性值可以是任何字符(包括数字和中文)
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="dupu">八阵图</title> <content> 功盖三分国,名成八阵图, 江流石不转,遗恨失吞吴. </content> </poems>
17
注意1:
• 在元素设置中,如果元素包含多个子元 素,如:〈!ELEMENT 书籍 (名称,作者, 价格)〉这种含多个子元素的声明,那么 “名称”、“作者”、“价格”这些标 记在XML文件中必须以上面排列的顺序 出现,每个标记必须而且只能够出现一 次。
18
练习—判断对错
第3章 文档类型定义DTD
“URL_DTD”为外部私有DTD文件的路径,可以是绝对路径,
也可以是相对路径。 “>”表示引用外部私有DTD文件指令的结束。
LOGO
引用外部公共DTD文件
<!DOCTYPE 根元素 PUBLIC “公共DTD名称” “DTD_URL”>
“<!DOCTYPE”中的“<!”表示一条指令的开始,“DOCTYPE” 表示该指令为文档类型定义指令,是关键字,必须大写。而且 在“<!”和“DOCTYPE”之间不允许加空格。 “根元素”为DTD根元素的名字,该名称必须为XML文档中 根元素的名称。 “PUBLIC”为引用外部公共DTD文件的关键字。同样的这个关 键字也必须全为大写。 “公共DTD名称”是DTD的名称,它是一个正式共用标识符。 “URL_DTD”为外部公共DTD文件的路径,一般为URL值。
属性值可有可无的属性
固定取值的属性 默认值
LOGO
CDATA类型 枚举类型 NMTOKEN类型 NMTOKENS类型 ID类型 IDREF类型 IDREFS类型 ENTITY类型 ENTITYS类型 NOTATION类型
属性类型
LOGO
实体的分类
灵活性,但有时需要的是统一,要求某一类文档具有相同
的结构。 可以保证数据交流和共享的顺利进行。 使用户能够不依赖具体的数据就能知道文档的逻辑结构。 可以验证数据的有效性。
LOGO
DTD的基本结构
“<!DOCTYPE”为DTD定义的开始标记,“>”为DTD定义
的结束标记。
“职工列表”为XML文档的根元素,对XML文档的规定要 放到根元素后面的一对中括号中。 “<!ELEMENT”为元素定义的开始标记,“>”为元素定义 的结束标记。
DTD
DTD
空元素:
<!ELEMENT 元素名称 EMPTY> 比如: <!ELEMENT student EMPTY> 使用: <students> <student></student> </students>
带有任意内容的元素 :
<!ELEMENT 元素名称 ANY> 比如: <!ELEMENT student ANY> 使用: <students> <student></student> </students>
DTD缺点
DTD不遵守XML语法; DTD不可扩展; DTD不支持命名空间的应用; DTD没有提供强大的数据类型支持,只能 表示很简单的数据类型。
DTD
DTD验证XML文档有很多局限。 微软提出了Schema(模式)的方案来改 进DTD。 Schema本身也是XML文档 Schema简单易懂 采用Schema已成为XML发展的一个趋势 Schema 是 DTD 替代者 XML Schema 是 W3C 标准(XML Schema 在 2001 年 5 月 2 日成为 W3C 标准)
3、Type表明该属性的类型 4、Default表明该属性的特点
DTD
DTDΒιβλιοθήκη Default属性特点可以有四种形式:
#REQUIRED(必须包含), #IMPLIED(可以忽略), #FIXED value(固定值), Default value (默认值)
DTD
实体声明:
第3章 DTD规范XML文档
14
3.4.1 引用内部 引用内部DTD
如果DTD文件内容直接写在XML文件的内部,那么 这样的内容称为XML文件的内部DTD. 内部DTD语法如下: <!DOCTYPE 根元素名[ 内部DTD语句 ]>
15
3.4.2 引用外部 引用外部DTD
使用外部DTD时,要在DOCTYPE中使用关键字 SYSTEM或PUBLIC.使用SYSTEM关键字主要用于 引用一个作者或组织所编写的众多XML文件所通用的 DTD文件.基本语法格式已经在3.1.2节中介绍过.在 使用PUBLIC关键字引用外部DTD文件的基本语法格 式中的DTD-URL被称为FPI(Formal Public Identifier ,正式公用标识符),也称作实体的"publicld". FPI有严格的形式,以保证它的全球唯一性.
23
3.5.5 外部参数实体
外部参数实体允许把较小规模的DTD进行组合 来建立较大规模的DTD,即在一个DTD中可以引用 另一个DTD文档,从而可以使用引进的DTD中元素 及属性的声明.
24
3.6 XML Schema简介 简介
对于XML Schema语言有两种模型:Microsoft 开发的Microsoft XML Schema和W3C开发的W3C XML Schema.Microsoft XML Schema已经开发 成熟并运用到实际,而最为正式的XML Schema语 言是由W3C制定的XML Schema规范,简称为 xsd(XML Schema Definition).本节主要介绍W3C 制定的XML Schema规范.由于XML Schema规范 体系非常庞大,因此仅对XML Schema模式最基本 的内容给予简单的介绍.
第3章 使用DTD规范XML文档
使用DTD规范XML文档
讲解内容
1、DTD基本概念 、 基本概念 2、DTD对元素的声 、 对元素的声 明 3、DTD对属性的声 、 对属性的声 明 4、DTD的引用 、 的引用 5、实体的声明与引 、 用
规范的XML文档
规范的XML文档包含两层含义:一个是指格式 良好的XML文档,另一个是指有效的XML文档。
3.2.3 元素声明综合示例
1.灵活控制元素出现次数 2.元素的分组与嵌套 (例3-8)
DTD对属性的声明 3.3 DTD对属性的声明
对元素属性加以声明后,完成如下任务: 设定某个元素所具有的各个属性及其名称 设定每个属性的数据类型 设定某个属性附加声明
是否是必要的 是否可选的 是否具有固定值 及该属性的默认值
格式良好的要求:
☆元素构成层次树型结构,有且仅有一个根节点 ☆语法符合XML1.0规范
有效性规定
XML文档的“有效性”是指一个XML文档应当遵守DTD或 Schema的规定,有效的XML文档肯定是格式良好的XML文 档。反过来,一个格式良好的XML文档不一定是有效的 XML文档。
3.1.1 DTD简介
该元素的子元素
( EX3-10.XML )
8.实体的声明
把实体看作有一定内容的一个常量
<!ELEMENT entity_name entity_>
声明实体常量
3.2.2 各种元素的声明
1.基本字符元素的声明 2.含子元素的严格声明 3.包含任意内容的声明 4.子元素出现次数的声明 5.选择性子元素的声明 6.空元素的声明 7.混合型元素的声明 8.实体的声明
7.NMTOKENS类型例Ex3-14
属性值包含一个或多个用空白分割的有效XML数据的 数据的 属性值包含一个或多个用空白分割的有效 名称代号 如下所示: 如下所示: <person date=“1999-05-06 2007-10-01 2008-10-11”> data</ person > 声明如下:<!ATTLIST person date NMTOKENS 声明如下: #REQUIRED>
DTD规范XML文档
DTD规范XML文档DTD是一套关于标记的语法规则,它定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。
一引入DTD(3种方式)1 内部DTD——内部的DTD紧跟在XML声明和处理指令之间。
< ? xml version=”1.0” encoding=”GB2312” standalone=”yes” ?><! DOCTYPE 根元素名称 [<! ELEMENT 子元素名称 (#PCDATA)>]>2 外部DTD外部文件类型定义存在于独立文件中,文件扩展名为“dtd”。
外部DTD的了处:可以方便地被多个XML文档共享,只需要定义一份DTD文档,即可为多个XML文档定义语义约束。
<!DOCTYPE 根元素名 SYSTEM " DTD-URL ">SYSTEM:关键字,指该外部DTD是私有的DTD-URL:通过URL将外部DTD引用到XML文档中,可以是绝对地址也是可以相对地址。
3公用DTD<!DOCTYPE 根元素名 PUBLIC " DTD-NAME ““DTD-URL”>公用DTD与外部DTD区别在于:公用DTD使用PUBLIC代替了原来的SYSTEM,并增加了DTD标识名。
二 DTD文档的结构<?xml version="1.0" encoding="UTF-8"?> DTD声明部分,DTD注释与XML 注释的语法完全相同<!ELEMENT …>定义一个XML元素<!ELEMENT …>…<!ATTLIST …>定义一个XML元素定义了一个属性<!ATTLIST …>…<!EMTITY…>定义一个实体…<!NOTATION…>定义一个符号...三 DTD对元素声明【重点】使用ELEMENT声明XML元素的语法, <!ELEMENT 元素名元素内容> 注:元素声明以“<!”开始,以“>”结束;元素声明指令“ELEMENT”为关键字,必须大写;元素名:为当前元素指定的元素名称;元素内容:元素名后面的内容用来指定元素的内容类型,可分为EMPTY(空)、子元素类型,混合型、ANY(任意)和#PCDATA 五种类型;DTD必须定义XML文档中允许出现的所有元素。
第3章_DTD文档类型定义
2 定义元素及其后代(4)
复合型元素的声明,即定义元素及其子元素: DTD尽管要求严格,但也有它的灵活性。使用正则表达式,我们就 可以描述父元素与子元素之间非常复杂的关系。下面就是描述子 元素的正则式:
元 字 符 + * ? 含 义 出现一次或多次 出现零次或多次 不出现或出现一次
()
| ,
一组要共同匹配的表达式
2 定义元素及其后代(6)
重复元素 DTD定义(+:至少出现一次) <!ELEMENT 联系人 (姓名,EMAIL+)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> 下面的XML片断是有效的: <联系人> <姓名>张三</姓名> <EMAIL>zhang@</EMAIL> <EMAIL>zhang@</EMAIL> <EMAIL>zhang@</EMAIL> </联系人> 而下面这个XML片断不是有效的: <联系人> <姓名>张三</姓名> </联系人>
2 定义元素及其后代(1)
元素的声明: 元素声明不但说明了每个XML文件中可能存在的元素,给出了元 素的名字,而且给出了元素的具体类型。一个XML元素可以为空, 也可以是一段纯文本,还可以有若干个子元素,而这些子元素同时 又可以有它们的子元素。DTD正是通过元素之间的父子关系,描 述了整个文件的结构关系。 元素的声明形式为: <!ELEMENT 元素名 元素内容描述> 元素内容可分为如下的3个类型: 简单型:元素内容是可解析的字符数据(Parsed Character Data, PCDATA),即不含有子元素的文本。 复合型:元素的内容含有其它元素,既有子元素。 混合型:元素的内容既有文本数据又有子元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.1 DTD的基本概念(7/13)
DTD的基本结构(4/4)
文档类型声明-例2
第3章
DTD规范XML文档
文档类型声明
<?xml version="1.0“ standlone=“no”?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
两种外部DTD:私有的外部DTD、公有的外部DTD
12/36
3.1 DTD的基本概念(11/13)
外部DTD(2/4)
第3章
DTD规范XML文档
如果需要在XML文档中使用外部DTD,则必须在X ML文档的文档类型定义部分通过URL引用外部DTD (1)私有的外部DTD 语法格式: <!DOCTYPE
外部DTD:note.dtd
引用外部DTD(私有)
注意
为了让DTD能支持特定字符,应该为外部DTD文 档指定编码方式
14/36
3.1 DTD的基本概念(13/13)
外部DTD(4/4)
(2)公有的外部DTD 语法格式:
第3章
DTD规范XML文档
<!DOCTYPE 根元素名 PUBLIC "DTD-NAME" "DTD-URL">
17/36
3.2 DTD对元素声明(3/21)
元素声明——EMPTY类型
第3章
DTD规范XML文档
该类型的元素只可能有属性而不能有内容。声明空 元素的语法如下:
<!ELEMENT 元素名 EMPTY>
例如:定义元素br是空元素 <!ELEMENT br EMPTY> 使用: <br/> 或 <br></br>
2/36
3.1 DTD的基本概念(1/13)
DTD简介(1/2)
第3章
DTD规范XML文档
DTD是Document Type Definition(文档类型 定义)的缩写。 DTD是一套关于标记的语法规则,它定义了文档的 逻辑结构,规定了文档中所使用的元素、实体、元素
的属性、元素与实体之间的关系。
判断XML文档内容是否为有效的XML文档内容。
4/36
3.1 DTD的基本概念(3/13)
DTD的作用
可以验证XML文档数据的有效性
第3章
DTD规范XML文档
可以为某类XML文档提供统一的格式和相同的结
构
可以保证在一定范围内,XML文档数据的交流和
共享 应用程序设计人员根据DTD就能够知道对应XM L文档的逻辑结构,从而编写出相应的处理程序
5/36
3.1 DTD的基本概念(4/13)
DTD的基本结构(1/4)
第3章
DTD规范XML文档
DTD文档并不是XML文档,DTD文档有如下结构:
第1行是DTD声明部分,该声明与XML声明的语法相同 0到多个注释部分,DTD注释与XML注释的语法完全相同 0到多个<!ELEMENT….>定义,每个标记定义一个XML元素 0到多个<!ATTLIST….>定义,每个标记定义一个XML元素 的属性列表 0到多个<!ENTITY….>定义,每个标记定义一个实体 0到多个<!NOTATION….>定义,每个标记定义一个符号
第3章
DTD规范XML文档
元素名称
元素属性
元素声明
指定
内容类型
出现频率
层次结构 在有效的XML文档中,使用 元素之前必须进行元素声明
16/36
3.2 DTD对元素声明(2/21)
第3章
DTD规范XML文档
使用ELEMENT声明XML元素的语法,语法格式如下: <!ELEMENT 元素名 元素内容类型> 元素声明以“<!ELEMENT”开始,以“>”结束 元素声明指令“ELEMENT”为关键字,必须大写 元素名:为当前元素指定的元素名称 元素内容类型: 指定元素的内容类型,它可以分为 EMPTY(空)、子元素类型、混合型、ANY(任意) 和#PCDATA 5种类型。
PUBLIC : 关键字,指明该外部DTD是公有的 DTD-NAME:DTD标识名,即DTD的逻辑名称,必须在 调用时指定该逻辑名称 DTD-URL:通过URL将外部DTD引用到XML文档中, 可以是绝对地址也可以相对地址
此种DTD一般由某个权威机构制定,供特定行业或公司
15/36
3.2 DTD对元素声明(1/21)
<! DOCTYPE 根元素名称 [ <! ELEMENT 子元素名称 (#PDATA)>
]>
10/36
3.1 DTD的基本概念(9/13)
内部DTD(2/2)
<?xml version="1.0“ standalone=“yes” ?> <!DOCTYPE note [
第3章
DTD规范XML文档
9/36
3.1 DTD的基本概念(8/13)
内部DTD(1/2)
第3章
DTD规范XML文档
所谓内部DTD是指DTD与XML数据定义放在同一份
文档中,即将DTD定义在XML文档内部。格式如下:
< ? xml version=”1.0” encoding=”GB2312” standalone=”yes” ?>
根元素名 SYSTEM " DTD-URL ">
SYSTEM : 关键字,指明该外部DTD是私有的 DTD-URL:通过URL将外部DTD引用到XML文档中, 可以是绝对地址也可以相对地址
13/36
3.1 DTD的基本概念(12/13)
外部DTD(3/4)
私有的外部DTD — 实例
<?xml version="1.0“ encoding=“utf-8”?>
6/36
3.1 DTD的基本概念(5/13)
DTD的基本结构(2/4)
第3章
DTD规范XML文档
使用DTD定义了合法的语义约束后,必须让XML文
档引用该DTD,这可以通过使用文档类型声明完成。
文档类型声明处于XML声明和根元素之间的位置, 包括文档类型定义或标识DTD文档的URL,以“<!
DTD例 子
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body
]> <note> <to>George</to>
(#PCDATA)>
to、 from、heading、 body四个元素均为 “#PCDATA” 类型
<from>John</from>
<heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
第3章
DTD规范XML文档
ANY类型实例——以下哪个文档是无效的?
<?xml version="1.0" DTD必须定义XML文档
encoding="GB2312" standalone="yes"?> <!DOCTYPE 书籍列表[ 中允许出现的所有元素。 <!ELEMENT 书籍列表 ANY> ]> 由此可见,虽然XML文档 <书籍列表> 书籍列表 允许开发者自由扩展各种 </书籍列表>="1.0" encoding="GB2312" standalone="yes"?> <!DOCTYPE 书籍列表[ <!ELEMENT 书籍列表 ANY> ]> <书籍列表> <书名>XML基本教程 </书名> 书籍列表 </书籍列表>
×
20/36
3.2 DTD对元素声明(6/21)
standalone=“yes” 表明了该文档不依 赖外部DTD文件 定义此XML文档的根元素 是note,说明此文档是 note类型的文档
有四个元素:to、 文档类型声明 from、heading、body
内 部
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to <!ELEMENT from (#PCDATA)> (#PCDATA)>
3/36
3.1 DTD的基本概念(2/13)
DTD简介(2/2)
第3章
DTD规范XML文档
DTD指定了XML文档必须遵守的一系列规则:规定 了在哪些文档中使用哪些标记,各标记出现的次序, 哪些标记出现在哪些标记中,哪些标记有属性等等。 DTD是XML文件的验证机制,定义好DTD,就可以 使用XML解析器对编写好的XML文档进行DTD检查,
11/36
3.1 DTD的基本概念(10/13)
外部DTD(1/4)
第3章
DTD规范XML文档