如何实现将DTD文档与XML文件相互关联的应用示例
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 三个子 元素,并且它们的次序不能颠倒。
使用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规范汽车特征XML文档

DTD规范汽车特征XML文档
DTD不仅可以规范XML元素的层次关系及出现频度,而且也可以规范XML 文档的属性。
元素内容描述目标数据的主要信息,而元素属性描述目标数据的附加信息,通过使用元素属性可以增加XML文档的数据容量而不干扰XML文档的核心数据。
使用DTD规范XML文档中元素的属性步骤如下所示:
(1)在本练习中,将对具体汽车进行描述,这是汽车基本特征有颜色、车门数量、车轮数量、座位数等特征;而汽车制造商、经销商等信息等附加信息。
在新
车颜色车门数量等感官信息,这些信息是购车者首先接触的信息。
而汽车制造商等信息则需要作为属性出现在XML文档中。
图3-2 汽车特征信息。
JSP XML 使用DTD规范XML文档

JSP XML 使用DTD规范XML文档
DTD可以指定用在XML文档中的元素、属性和实体,以及这三者之间的联系等,使XML文档具有预定义的逻辑层次结构,从而更容易实现数据共享。
本练习使用DTD来规范XML文件的学生信息。
具体步骤如下所示:
(1)确定与学生有关的核心信息。
与学生有关的信息可以有很多,这里可以简化为包括信息有:姓名、编号、性别、年龄等信息。
(2)编写DTD文件。
学生是学校中的一员,具有层次结构,所以通过班级把
在上述声明中规定,根过元素为“学校”,“学校”可以有一个或多个“班级”子元素,同时“学校”也有自己的属性“编号”;“班级”可以有一个或多“学生”子元素,“班级”也有自己的属性“编号”;同样“学生”可以包含子元素“姓名”、“性别”、“年龄”各一个,同时“学生”也有自己的属性“编号”。
(3)编写XML文档。
在与student.dtd文件所在的目录下创建XML文件:stu
上述XML文件中引用外部DTD规范,使用浏览器中打开XML文档,如图7-21所示。
图7-21 学生信息。
第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)> ]>
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文档中允许出现的所有元素。
DTD和XSD

前面提到过的, DTD ( Document Type Definition ,文档类型定义)就是定义 XML 文档中元素的结构和内容等。
其实 DTD 就相当于 XML 中的“词汇”和“语法”,不同的行业可以定义自己的“词汇”和“语法”,以利于解析器验证 XML 文档的有效性,并且这样也利于行业中和行业之间的交流。
就相当于只有当两个人对各自说出的词汇都理解对方的时候才能有顺利的交流。
这其实就是对 XML 文档使用元素的定义的以层抽象,把它的定义独立出一个文件,以利于对信息的隐藏和扩展。
这也可以把它想象成程序语言,比如 C# 中的接口的定义。
把 DTD 文件想象成一个接口,而引用这个 DTD 文件的 XML 文档是这个接口的实现类,只要了解了这个 DTD 文件,就大致知道了和这个 DTD 文件相链接的 XML 文档的一些框架信息。
DTD 文件也可以看成是一系列 XML 文档的模板,它定义了相关 XML 文档的元素,属性,排列方式(元素,属性等),元素的内容类型,以及元素的层次结构等。
DTD 中元素的声明<;!ELEMENT 元素名(元素描述) >;这里主要介绍元素描述,元素的描述包含两部分:1. 如果元素是简单元素,即该元素不包含子元素,则描述部分是针对该元素的内容的限制或是规定。
这种限制的描述可以是:#PCDATA :元素的内容只能是可解析的文本数据。
<;!ELEMENT 元素名 (#PCDATA)>;EMPTY :元素内容必须为空,但可以包含属性。
<; ! ELEMENT 元素名 EMPTY>;2. 如果元素是复杂元素,即该元素包含子元素,则元素描述包含对子元素名的列表(可用正则表达式表达)。
元素描述的括号表示内容描述的组合。
<;!ELEMENT book(title, author+, summary | content)>;正则表达式用法:( ) 给元素分组(A | B | C), (D | E), F| 在列出的对象中选择一个 (A | B)* 对象允许出现 0 到多次 (A*)+ 对象应出现 1 到多次 (A+)对象可以出现 0 到 1 次 (A?), 对象以指定顺序出现(A, B, C)同时,如果不能确定一个元素是否含有子元素或是只能包含文本,那么可以将元素定义为混合类型的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<?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 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
杨教授工作室,版权所有,盗版必究, 3/3ห้องสมุดไป่ตู้页