XML 混合引用DTD
合集下载
xml 《DTD》模式简介

DTD 的局限性
由于 DTD 本身并不是专门面向 XML 的数据 模式语言,所以在对 XML 数据进行建模时, 也存在一定的局限性。
DTD 没 有 采 用 XML 的 语 法 形 式 (examples/xslt2/book.dtd)。 DTD 并不能完全满足 XML 自动化处理的要求,例 如不支持 XML 中的命名空间、不能很好实现应用 程序不同模块间的相互协调,缺乏对文档结构、属 性、数据类型等约束的足够描述能力等等。
不受限制的词汇表:可以随意地使用任何元 素、属性名称。 没有任何语法规则:每个元素中都可以包含 任意的内容(混合内容、子元素、文本、或 者为空)。 对于属性没有任何限制:每个元素都可以包 含任意的属性。
数据模式的用途 2
XML 树型模型的表达能力更强,对于相同的 数据可能采取各种不同的表示方式,为信息的 交换和处理带来极大的困难。 需要通过某种方式,定义 XML 数据的词汇表 (可能是针对某个领域),包括元素和属性的 名称、甚至取值,并且需要通过语法规则控制 XML 元素的结构,而实现这项任务的过程, 通常将其称为“XML 文档的数据模式设计”。
(4). 只包含子元素的元素
要声明一个只包含子元素的元素,其语法为:
<!ELEMENT element-name (child1,child2,...)>
其中,(child1,child2,...) 表示一个序列,即内 容模型。 <!ELEMENT student (stu_name, stu_no, stu_bak)> 。这项声明表示 student 元素中必 须包含 stu_name、stu_no、stu_bak 三个子 元素,并且它们的次序不能颠倒。
第3章 DTD规范XML文档(1)

8/36
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.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
使用DTD规范XML文档

例:<!ELEMENT TITLE(#PCDATA)>
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>
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章 XML文档类型定义 DTD

– 数据型(即字符内容)
• <Text>Hello</Text>
– 元素型(即包含的内容是元素)
• <Letter>
• <sub>QUIT</sub>
• <Body>Hello everybody!</Body>
• </Letter>
– 混合型(包含的内容既有元素又有内容)
• <para>
• Hello everybody
2021/2/22
23
属性的定义
• 语法
<!ATTLIST 元素名称 属性名称 类型 属性特点
…... >
CDATA ID IDREF/IDREFS
NMTOKEN/NMTOKENS
Enumerated
#REQUIRED #IMPLIED #FIXED value Default value
2021/2/22
19
注意2:
• 如果在设定元素时,按照〈!ELEMENT 书籍ANY〉,这样在元素下就可以包含 任意被设定过的元素,出现的次数和顺 序也不受限制,并且在该元素下,除了 可以包含子元素以外,还能够包含一般 的文字。
2021/2/22
20
注意3:
• 在XML文件中,一个标记可能多次出现 (或者不出现),除了在它们的父元素 中用ANY关键字之外,还可以在元素的 旁边加上特定的符号来控制标记出现的 次数。
第3章 XML文档类型定义 DTD
2021/2/22
1
第3章 XML文档类型定义 ---- DTD
2021/2/22
2
目标
理解文档类型定义 DTD声明 元素声明 属性声明 实体声明
第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章 有效的XML文件—DTD

语法格式如下: <!ELEMENT 元素名称 (#PCDATA)> 【例3-6】声明简单元素
<!ELEMENT bookname(#PCDATA)> 上述bookname可以是空元素也可以包含数据内容,但是一定不能 包含子元素。如果在XML文档中定义子元素,则是非法的,例如:
<bookname> <author>张三</author> <name>XML教程</name>
DTD定义了置标语言、文档结构的语法和词汇表,实际
上是定义了一个语法分析器。
XML基础教程
第3章 有效的XML文件-DTD
第6页
DTD的分类
外 部 DTD 可 以 单 独 形 成 文 件 , 后 缀 名 为.dtd,该文件可以被多个XML文档共享和 DTD调用。 内部DTD是在XML文档中直接定义DTD, 该DTD只能被当前XML文档使用。
XML基础教程
第3章 有效的XML文件-DTD
第12页
DTD基本结构模板
DTD的基本结构包括XML声明、元素声明、属性声明、
实体声明等,DTD基本结构模板如下所示:
<!ELEMENT …> <!ELEMENT …> … <!ATTLIST …> <!ATTLIST …> … <!ENTITY…> … <!NOTATION…> XML基础教程...
XML基础教程
第3章 有效的XML文件-DTD
第17页
Unrestricted元素
Unrestricted 元素表示在XML文档中可以包含任 何在DTD中定义的元素内容。一般情况下,只把 文档的根元素定义为此类型,这样设定后,元素 出现的次数和顺序不受限制。
<!ELEMENT bookname(#PCDATA)> 上述bookname可以是空元素也可以包含数据内容,但是一定不能 包含子元素。如果在XML文档中定义子元素,则是非法的,例如:
<bookname> <author>张三</author> <name>XML教程</name>
DTD定义了置标语言、文档结构的语法和词汇表,实际
上是定义了一个语法分析器。
XML基础教程
第3章 有效的XML文件-DTD
第6页
DTD的分类
外 部 DTD 可 以 单 独 形 成 文 件 , 后 缀 名 为.dtd,该文件可以被多个XML文档共享和 DTD调用。 内部DTD是在XML文档中直接定义DTD, 该DTD只能被当前XML文档使用。
XML基础教程
第3章 有效的XML文件-DTD
第12页
DTD基本结构模板
DTD的基本结构包括XML声明、元素声明、属性声明、
实体声明等,DTD基本结构模板如下所示:
<!ELEMENT …> <!ELEMENT …> … <!ATTLIST …> <!ATTLIST …> … <!ENTITY…> … <!NOTATION…> XML基础教程...
XML基础教程
第3章 有效的XML文件-DTD
第17页
Unrestricted元素
Unrestricted 元素表示在XML文档中可以包含任 何在DTD中定义的元素内容。一般情况下,只把 文档的根元素定义为此类型,这样设定后,元素 出现的次数和顺序不受限制。
XML DTD(文档类型定义)

CDATA CDATA 的意思是字符数据(character data)。 CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记 来对待,其中的实体也不会被展开。
来自 </dtd/dtd_building.asp>
DTD - 元素
例子: <!ELEMENT note (to,from,header,(message|body))> 上面的例子声明了:"note" 元素必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。
声明混合型的内容
例子: <!ELEMENT note (#PCDATA|to|from|header|message)*>
<!DOCTYPE 根元素 SYSTEM "文件名">
这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD:(在 IE5 中打开,并选择“查看源代码”命令。) <?xml version="1.0"?> <!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_building.asp>
DTD - 元素
例子: <!ELEMENT note (to,from,header,(message|body))> 上面的例子声明了:"note" 元素必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。
声明混合型的内容
例子: <!ELEMENT note (#PCDATA|to|from|header|message)*>
<!DOCTYPE 根元素 SYSTEM "文件名">
这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD:(在 IE5 中打开,并选择“查看源代码”命令。) <?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
如何实现将DTD文档与XML文件相互关联的应用示例

<?xml version="1.0" encoding="gbk" ?> <!DOCTYPE dbconfig SYSTEM "dbConnectionConfig.dtd"> <dbconfig> <JDBC_DBDriver_ClassName>com.mysql.jdbc.Driver</JDBC_DBDriver_ClassName> <JDBC_DSN_URL>jdbc:mysql://localhost:3306/imsystem</JDBC_DSN_URL>
杨教授工作室,版权所有,盗版必究, 1/3 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
<JDBC_dbUserName>root</JDBC_dbUserName> <JDBC_dbUserPassWord>root </JDBC_dbUserPassWord> </dbconfig>
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1
如何实现将 DTD 文档与 XML 文件相互关联的应用示例
1、在 XML 文件中引用该 DTD 文件 (1)打开 dbConnectionConfig.xml 文件,并在 Outline 视图中右击<?xml>声明标签
(2)最后产生出下面的结果
2、Run Valid 以检查正确性
而如果没有错误时,将出现下面的正确性的提示
杨教授工作室,版权所有,盗版必究, 2/3 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XML 混合引用DTD
如果XML文件同时带有内部DTD和外部DTD文件,那么XML解析器会将二者合一。
如果内部的DTD和外部的DTD文件同时声明了某个元素,那么将会导致错误。
如果不准备更改一个已经获得广泛支持的DTD文档,但是又需要增加新的内容时,可以同时使用内部DTD和外部DTD。
内部DTD可以方便地增加新内容,又不影响其他使用同一外部DTD的XML文档的有效性。
混合使用DTD的格式如下所示:
下面通过实例来说明如何使用混合DTD,首先创建一个外部DTD文件,内容
根元素的内容可以是任意内容,所以可以使用为根元素添加新的元素内容。
上述代码保存为dtdFile.xml文件。
引用该DTD的XML文件内容如下所示:
上述代码保存为dtds.xml文件,在内部DTD中新声明了一个名称为“描述”的元素。
在浏览器中打开该文件,如图3-5所示。
图3-5 混合使用DTD。