实验三:DTD的应用
实验二 DTD实验报告

07103230 宋琛实验二DTD实验报告一、实验目的1.掌握编写dtd文件的声明和方法。
2.掌握外部dtd和内部dtd的区别及编写规则3.练习将dtd与xml文件进行连接。
二、实验器材1.计算机一台。
2.Xmlspy工具软件。
三、实验内容1.编写dtd文件并与上次实验编写的xml文件进行连接。
2.编写内部dtd文件的。
对上次实验内容进行简单修改,使运行后的结果为valid四、实验步骤(1)新建dtd文件;(2)编写dtd文件,完成后使其生成xml模板;(3)比较生成的模板与上次实验完成的xml文件,格式是否相同,若不同则进行修改;(4)修改上次完成的xml文档,在开头加入“”<!DOCTYPE bookcase SYSTEM "Untitled1.dtd">,导入dtd文件;运行后外部dtd完成。
(5)将完成的dtd文件拷贝到xml中;(6)在dtd开头加入“<!DOCTYPE bookcase[…]>”并对文件简单修改,运行valid后内部dtd 编写完成。
(7)结束。
五:实验完成的程序1.外部dtd:<?xml version="1.0" encoding="UTF-8"?><!ELEMENT ENTER_NAME_OF_ROOT_ELEMENT_HERE EMPTY><!ELEMENT bookcase (book)*><!ELEMENT book (b-name,author,price,publishing-house)><!ELEMENT b-name (#PCDATA)><!ELEMENT author (name,E-mail)><!ELEMENT price (#PCDATA)><!ELEMENT name (#PCDATA)><!ELEMENT E-mail (#PCDATA)><!ELEMENT publishing-house (p-name,address,zipcode,E-mail)><!ELEMENT address (#PCDATA)><!ATTLIST book type (科技|教育) #REQUIRED><!ELEMENT zipcode (#PCDATA)>与其连接的xml文件:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE bookcase SYSTEM "Untitled1.dtd"><bookcase><book type="教育"><b-name>XML实用培训教程</b-name><author><name>张健飞</name><E-mail>zjf@</E-mail></author><price>27元</price><publishing-house><p-name>科学出版社</p-name><address>北京东皇城根北街16号</address><zipcode>100717</zipcode><E-mail>yanmc@</E-mail></publishing-house></book><book type="科技"><b-name>XML网页制作彻底研究</b-name><author><name>陈会安</name><E-mail>cha@</E-mail></author><price>47元</price><publishing-house><p-name>中国铁道出版社</p-name><address>北京市宣武区右安门西街8号</address><zipcode>100054</zipcode><E-mail>bjb@</E-mail></publishing-house></book></bookcase>内部dtd:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE bookcase[<!ELEMENT bookcase (book)*><!ELEMENT book (b-name,author,price,publishing-house)><!ELEMENT author (name,E-mail)><!ELEMENT price (#PCDATA)><!ELEMENT name (#PCDATA)><!ELEMENT E-mail (#PCDATA)><!ELEMENT publishing-house (p-name,address,zipcode,E-mail)><!ELEMENT p-name (#PCDATA)><!ELEMENT address (#PCDATA)><!ATTLIST book type (科技|教育) #REQUIRED><!ELEMENT zipcode (#PCDATA)>]><bookcase><book type="教育"><b-name>XML实用培训教程</b-name><author><name>张健飞</name><E-mail>zjf@</E-mail></author><price>27元</price><publishing-house><p-name>科学出版社</p-name><address>北京东皇城根北街16号</address><zipcode>100717</zipcode><E-mail>yanmc@</E-mail></publishing-house></book><book type="科技"><b-name>XML网页制作彻底研究</b-name><author><name>陈会安</name><E-mail>cha@</E-mail></author><price>47元</price><publishing-house><p-name>中国铁道出版社</p-name><address>北京市宣武区右安门西街8号</address><zipcode>100054</zipcode><E-mail>bjb@</E-mail></publishing-house></book></bookcase>六:实验中产生的错误和感想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文档中如何应用DTD文档的应用示例

1.1在XML文档中如何应用DTD文档的应用示例1.1.1应用内部DTD1、在XML文件中直接内嵌DTD的定义标签<?xml version="1.0" encoding="gbk" ?><!DOCTYPE dbconfig [<!ELEMENT dbconfig (JDBC_DBDriver_ClassName,JDBC_DSN_URL,JDBC_dbUserName,JDBC_dbUserPassW ord)><!ELEMENT JDBC_DBDriver_ClassName (#PCDATA)><!ELEMENT JDBC_DSN_URL (#PCDATA)><!ELEMENT JDBC_dbUserName (#PCDATA)><!ELEMENT JDBC_dbUserPassWord (#PCDATA)>]><dbconfig><JDBC_DBDriver_ClassName>com.mysql.jdbc.Driver</JDBC_DBDriver_ClassName> <JDBC_DSN_URL>jdbc:mysql://localhost:3306/imsystem</JDBC_DSN_URL><JDBC_dbUserName>root</JDBC_dbUserName><JDBC_dbUserPassWord>root </JDBC_dbUserPassWord></dbconfig>2、测试正确性1.1.2Eclipse提供有对DTD的语法检查功能——及时语法帮助和检查1、根标签内的各个子标签不满足DTD中的要求时——有相同的两个子标签存在2、根标签内的各个子标签不满足DTD中的要求时——存在有DTD中没有的子标签时3、根标签内的各个子标签不满足DTD中的要求时——缺少某个子标签时1.1.3为标签添加属性定义1、在Outline视图中右击某个标签定义2、然后在属性视图中修改属性定义最后产生出下面的结果<?xml version="1.0" encoding="UTF-8"?><!ELEMENT dbconfig (JDBC_DBDriver_ClassName,JDBC_DSN_URL,JDBC_dbUserName,JDBC_dbUserPassWord) ><!ATTLIST dbconfig id CDATA #REQUIRED><!ELEMENT JDBC_DBDriver_ClassName (#PCDATA)><!ELEMENT JDBC_DSN_URL (#PCDATA)><!ELEMENT JDBC_dbUserName (#PCDATA)><!ELEMENT JDBC_dbUserPassWord (#PCDATA)> 3、此时的XML文件将出现错误错误的原因如下4、修改XML文件。
DTD(文档类型定义)语法

一简介文档类型定义(DTD)是用来定义一段合法的XML文档块。
它用来验证你的XML 文档是以一系列合法的元素构成的。
DTD可以在XML文档内部定义,也可以在通过外部文件的方式引入1 内部声明方式如果要把DTD包含在你的XML的内部,需要以以下的语法包含一个“DOCTYPE”声明:<!DOCTYPE 根元素 [子元素声明]>下面是一个包含DTD的XML例子:<?xml version="1.0"?><!DOCTYPE note [<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>]><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend</body></note>The DTD above is interpreted like this:以上的DTD声明解释如下:第二行!DOCTYPE note声明这是一个note类型的文档第三行!ELEMENT note声明note元素包含四个子元素:to,from,heading,body 第四行的!ELEMENT to声明to元素的类型是“#PCDATA”第五行的!ELEMENT from声明from元素的类型是“#PCDATA”以此类推... ...2 外部DOCTYPE声明If the DTD is external to your XML source file, it should be wrapped in a DOCTYPE definition with the following syntax:如果DTD是在XML源文件的外部,就需要在XML文件内用以下的语法声明DOCTYPE <!DOCTYPE 根元素 SYSTEM "文件名">以下是一个使用外部DOCTYPE声明的XML例子<?xml version="1.0"?><!DOCTYPE note SYSTEM "note.dtd"><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body>以下是note.dtd 文件的内容:<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>3 为什么要使用DTDWith DTD, each of your XML files can carry a description of its own format with it.使用DTD,有以下好处:1,你的每一个XML文件可以描述自身的结构2,使不相关的人对于某种用于交流的数据达成统一的共识3,你的应用程序可以通过一个标准(DTD)对来自于外部的数据(XML文件)进行有效性验证。
实验三 DTD语法

学号CDATA #REQUIRED
>
&ENT电子邮件(#PCDATA)>
<!ELEMENT QQ (#PCDATA)>
<!ELEMENT通信地址EMPTY>
<!ATTLIST通信地址
省份CDATA #REQUIRED
城市CDATA #REQUIRED
四、实验步骤(源程序)
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT年级(班级)+>
<!ATTLIST年级
入学年份CDATA #REQUIRED
>
<!ELEMENT班级(学生)+>
<!ATTLIST班级
班级号CDATA #REQUIRED
>
<!ELEMENT学生(姓名+,电子邮件, QQ,通信地址+)>
街道CDATA #IMPLIED
邮政编码CDATA #REQUIRED
>
六、实验心得
七、指导教师评语(或成绩)
教师签字:2007年11月15日
《XML编程与应用教程》实验报告
学生姓名
黄上上
学号
201141842110
专业班级
软件11-1
实验名称
实验3 DTD语法
实验类型
设计类
一、实验目的、要求:1学习设计DTD的基本方法2熟练掌握DTD的使用。
二、实验内容1为学生信息建立一个DTD文档类型定义XML文档
三、实验环境(如设备、工具、软件及平台):PC一台、editplus编辑器,windows平台
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>
DTD
1. 2. 3. 4. 5. 6. <?xml version="1.0" encoding="gb2312" ?> <!ELEMENT books (book*)> <!ELEMENT book (b_name,price)> <!ATTLIST book ISBN ID #REQUIRED> <!ELEMENT b_name (#PCDATA)> <!ELEMENT price (#PCDATA)>
code4_18_1.xml,作者信息XML 文档片段。 <?xml version="1.0" encoding="gb2312" ?> <authors> <author id="a0001" ISBN="ISBN7-04-014768-8"> <a_name>丁跃潮</a_name> <sex>男</sex> <email> ding@</email> </author> <author id="a0002" ISBN="ISBN7-113-05892-2"> <a_name>龚涛</a_name> <sex>男</sex> </author> </authors> code4_18_2.xml,书籍信息XML 文档片段。 <?xml version="1.0" encoding="gb2312" ?> <books> <book ISBN="ISBN7-04-014768-8"> <b_name>计算机导论</b_name> <price>19.7</price> </book> <book ISBN="ISBN7-113-05892-2"> <b_name>PowerBuilder 入门教程</b_name> <price>48.0</price> </book> </books>
XML实验3(DTD)
实验报告实验项目名称XML实验3(DTD)所属课程名称XML设计技术班级07计算机(软件工程方向)学号姓名成绩实验指导3-1:使用内部DTD编写动物园动物信息的XML文档用下述规范为动物园编写一个XML文档,可以使动物管理员很清楚地知道园内所有动物的种类和数量。
(1)动物园根元素,包括爬行类、两栖类、鸟类、哺乳类和鱼类五个子类。
(2)每个子元素下都包含动物元素,元素的属性为数量。
实验目标(3)掌握XML内部DTD的语法结构。
(4)掌握XML内部DTD在文档中的应用。
实验步骤(1)打开记事本,进行XML文档的声明。
(2)声明一个内部DTD,DTD名为动物园。
根元素为动物园,子元素为爬行类、两栖类、鸟类、哺乳类和鱼类,各类的元素下都有动物元素且为无数多个(动物+)。
声明动物元素的属性数量。
<!DOCTYPE 动物园[<!ELEMENT 动物园(爬行类,两栖类,鸟类,哺乳类,鱼类)><!ELEMENT 爬行类(动物+)><!ELEMENT 两栖类(动物+)><!ELEMENT 鸟类(动物+)><!ELEMENT 哺乳类(动物+)><!ELEMENT 鱼类(动物+)><!ELEMENT 动物(#PCDATA)><!ATTLIST 动物数量CDATA #REQUIRED>]>(3)在DTD中定义好文档所有的元素及属性后,完成文档。
(4)运行结果如图所示。
实验指导3-2:结合已知外部DTD创建XML文档。
使用下面外部DTD给出的元素及属性,创建一个显示图书编辑信息的XML 文档。
<?xml version="1.0" encoding="UTF-8"?><!ELEMENT 出版社(图书+)><!ENTITY LH "李红"><!ENTITY ZHL "张洪亮"><!ENTITY % CH "(章节,描述)"><!ELEMENT 图书(作者+,图片*,内容+,新章节*)><!ATTLIST 图书图书号ID #REQUIRED><!ELEMENT 作者(#PCDATA)><!ELEMENT 图片(#PCDATA)><!ELEMENT 内容%CH;><!ELEMENT 新章节%CH;><!ATTLIST 新章节添加(是|否) "否"><!ELEMENT 章节(#PCDATA)><!ATTLIST 章节数目CDATA #REQUIRED><!ELEMENT 描述(目录*,简介?)><!ELEMENT 目录(#PCDATA)><!ELEMENT 简介(#PCDATA)>实验目标(1)掌握外部DTD的语法结构。
XML DTD(文档类型定义)
来自 </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全称为decument type definition,它是文档类型定义,其中规定XML文档中的元素、属性、标记、文档中的实体及其相互关系。
DTD为XML文档结构制定了一套规则。
DTD采用了非XML的语法描述语义约束,可以提供如下功能:1、DTD可以为应用程序提供一种统一的XML文档格式2、DTD有助于数据交流与共享3、DTD可以使用脱离实际数据就能知道文档的逻辑结构4、DTD可以验证数据的有效性5、通过使用DTD可以让每个XML文件带有一个有关其自身的格式描述6、不同的公司、组织可一致的使用某个标准的DTD来交换数据7、应用程序也可以使用某个标准的DTD验证所介绍的XML文档是否符合语义约束8、开发者可以使用DTD来验证所创建的XML文档DTD约束包括以下几个方面1、定义XML的根元素、内容和结构2、定义XML文档中可以接受哪些元素3、定义XML文档里每个元素接受的合法内容包括是否可以为空、是否可以是文本、可以接受哪些子元素、子元素出现的顺序及子元素出现的次数等4、定义XML文档中每个元素能接受哪些属性5、定义XML文档中每个属性的类型、能接受哪些值以及元素对属性的约束等6、定义属性的固定值和默认值7、定义XML文档以及DTD文档中可以使用的实体注:一个合法的文档必须符合DTD指定的约束条件,而且它的基本元素必须是在文档类型声明中指定的。
只有符合DTD规则的XML文档才是有效地文档。
引入DTD的方式:1、内部引用方式2、外部引用方式其中外部引用方式可划分为两种即SYSYTEM引用方式、PUBLIC引用方式。
下面我们逐一介绍DTD的引用方式首先介绍内部DTDDTD语义约束与xml文档的内容放在同一个XML文档中。
内部DTD紧跟在XML声明和处理指令之后,以”<!DOCTYPE “开始,以”]>”结束。
其语法格式如下<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE 根元素名[元素描述[DTD的内容]]>XML文档主体部分<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE book[<!ELEMENT book (computer)*><!ELEMENT computer (book_name,price,author)><!ELEMENT book_name(#PCDATA)><!ELEMENT price (#PCDATA)><!ELEMENT author (#PCDATA)>]><book><computer><author>redarmychen</author><book_name>JavaWeb开发</book_name><price>30.0</price></computer><computer><book_name>CSS应用程序的开发</book_name><price>1000</price><author>redarmy_Chen</author></computer></book>案例分析:第一行XML声明语句中的standalone属性取”yes” 值表示所有必须的实体声明都包含的文档中说明该文档是独立文档。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三:DTD的应用
1、请给下列xml文档编写出合理的DTD文件。
<?xml version="1.0" encoding="GB2312" standalone="yes"?> <学生列表>
<说明>请编写出该文档的DTD文件</说明>
<学生>
<学号>200120101</学号>
<姓名>季慧奇</姓名>
<性别>女</性别>
<班级>01信管1</班级>
<出生年月>1985-1-2</出生年月>
<入学成绩>450</入学成绩>
</学生>
<学生>
<学号>200120102</学号>
<姓名>凌怡</姓名>
<性别>女</性别>
<班级>01信管1</班级>
<出生年月>1983-6-20</出生年月>
<入学成绩>449</入学成绩>
</学生>
</学生列表>
2、请给下面DTD文件编出一个合理的XML文档。
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE 笔记本电脑价格[
<!ELEMENT 型号 (#PCDATA)>
<!ELEMENT CPU (#PCDATA)>
<!ELEMENT 内存 (#PCDATA)>
<!ELEMENT 显卡 (#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
<!ELEMENT 厂家 (#PCDATA)>
<!ELEMENT 笔记本电脑 (型号, CPU,内存,显卡,价格)>
<!ELEMENT 笔记本电脑价格 (厂家,笔记本电脑, 笔记本电脑)> ]>。