实验二 XML文档中使用DTD

一、实验目的

通过本实验,使学生能够了解并掌握XML DTD的定义方法及其用途

(1)了解并掌握DTD元素声明的基本语法

(2)了解并掌握DTD属性声明的基本语法

(3)了解并掌握DTD实体声明的基本语法

二、实验条件

配置有windows记事本、写字板 或 XMLSpy开发环境的计算机设备。

三、实验原理及相关知识

XML DTD的声明和与XML文档的关联

四、实验内容及步骤

1、对以下“book.xml”进行DTD定义(设DTD文件名为“bookinfo.dtd”)

<?xml version="1.0" encoding="UTF-8"?>

<!-- 这是一个用XML描述的例子 -->

<bookcase>

<book type="教育">

<b-name>XML实用培训教程</b-name>

<author>

<name>张健飞</name>

<E-mail>zjf@163.com</E-mail>

</author>

<price>27元</price>

<publishing-house>

<p-name>科学出版社</p-name>

<address>北京东皇城根北街16号</address>

<zipcode>100717</zipcode>

<E-mail>yanmc@bhp.com.cn</E-mail>

</publishing-house>

</book>

<book type="科技">

<b-name> XML网页制作彻底研究</b-name>

<author>

<name>陈会安</name>

<E-mail>cha@163.com</E-mail>

</author>

<price>47元</price>

<publishing-house>

<p-name>中国铁道出版社</p-name>

<address>北京市宣武区右安门西街8号</address>

<zipcode>100054</zipcode>

<E-mail>bjb@tqbooks.com.cn</E-mail>

</publishing-house>

</book>

</bookcase>

(1)书写XML DTD定义头部

<?xml version="1.0" encoding="UTF-8"?>

(2)书写XML DTD元素定义

<!ELEMENT bookcase (book*)>

<!ELEMENT book (b-name,author,price,publishing-house)>

<!ELEMENT b-name (#PCDATA)>

<!ELEMENT author (name,E-mail)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT E-mail (#PCDATA)>

<!ELEMENT price (#PCDATA)>

<!ELEMENT publishing-house (p-name,address,zipcode,E-mail)>

<!ELEMENT p-name (#PCDATA)>

<!ELEMENT address (#PCDATA)>

<!ELEMENT zipcode (#PCDATA)>

(3)添加XML DTD属性定义(添加在book元素定义之后)

<!ATTLIST book type (教育|科技) "科技">

(4)创建带有DTD验证的XML文档“book-ondtd”,并在IE中打开该文档,观察符合DTD定义的XML文件显示。

bookinfo.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 name (#PCDATA)>
<!ELEMENT E-mail (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT publishing-house (p-name,address,zipcode,E-mail)>
<!ELEMENT p-name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT zipcode (#PCDATA)>
<!ATTLIST book type (教育|科技) "科技">

2、为一个XML文档创建外部DTD,并根据创建的DTD编写对应的XML文档,进行有效性验证。该XML文档的根元素名为“班级学生花名册”;“班级学生花名册”元素必须包含两个元素:“学生名单”和“班级信息”;“学生名单”包含若干“学生”元素;“学生”元素包含“姓名”、“学号”、“性别”三个子元素;“班级信息”又包含“班主任姓名”和“班主任联系电话”两个子元素。

Classinfo.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT 班级学生花名册 (学生名单,班级信息)>
<!ELEMENT 学生名单 (学生*)>
<!ELEMENT 学生 (姓名,学号,性别)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 学号 (#PCDATA)>
<!ELEMENT 性别 (#PCDATA)>
<!ELEMENT 班级信息 (班主任姓名,班主任联系电话)>
<!ELEMENT 班主任姓名 (#PCDATA)>
<!ELEMENT 班主任联系电话 (#PCDATA)>班级学生花名册:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 班级学生花名册 SYSTEM "F:\测试\XML\Classinfo.dtd">
<班级学生花名册><学生名单><学生><姓名>小黑</姓名><学号>11111111</学号><性别>男</性别>         </学生><学生><姓名>小红</姓名><学号>11111112</学号><性别>女</性别></学生><学生><姓名>小蓝</姓名><学号>11111113</学号><性别>女</性别></学生><学生><姓名>小白</姓名><学号>11111114</学号><性别>男</性别></学生></学生名单><班级信息><班主任姓名>老班</班主任姓名><班主任联系电话>15555555555</班主任联系电话></班级信息>
</班级学生花名册>

3、根据实验一中的“person.xml”文件,编写对应的“person.dtd”文件,并使用XMLSpy 对“person.dtd”和“person.xml”进行有效性性验证,若有错误,按照提示进行修改。

person.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT Persons (person*)>
<!ELEMENT person (name,age,address,telephonenumber,e-mail)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT address (province,city,street,zip-code)>
<!ELEMENT province (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT street (#PCDATA)>
<!ELEMENT zip-code (#PCDATA)>
<!ELEMENT telephonenumber (#PCDATA)>
<!ELEMENT e-mail (#PCDATA)>
<!ATTLIST person sex (男|女) #REQUIRED>
person.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Persons SYSTEM "F:\测试\XML\person.dtd">
<Persons><person sex="男"><name>小黑</name><age>18</age><address><province>河南省</province><city>郑州市</city><street>文化路街道</street><zip-code>450000</zip-code></address><telephonenumber>18888888888</telephonenumber><e-mail>66667777@qq.com</e-mail></person><person sex="女"><name>小红</name><age>17</age><address><province>陕西省</province><city>西安市</city><street>汉城街道</street><zip-code>710000</zip-code></address><telephonenumber>17777777777</telephonenumber><e-mail>55556666@qq.com</e-mail></person><person sex="男"><name>小明</name><age>22</age><address><province>湖北省</province><city>武汉市</city><street>金银湖街道</street><zip-code>430000</zip-code></address><telephonenumber>13263637878</telephonenumber><e-mail>77778888@qq.com</e-mail></person><person sex="女"><name>小紫</name><age>19</age><address><province>山西省</province><city>太原市</city><street>桥东街道</street><zip-code>030000</zip-code></address><telephonenumber>15566669999</telephonenumber><e-mail>32152659@qq.com</e-mail></person><person sex="男"><name>李某某</name><age>20</age><address><province>河南省</province><city>某某市</city><street>某某大街</street><zip-code>454566</zip-code></address><telephonenumber>17355669988</telephonenumber><e-mail>26068823@qq.com</e-mail></person>
</Persons>

五、思考题及其它

(1)为什么要定义DTD?

不同人编写的XML文档所采用的描述方式不尽相同,这使得后续的自动汇总处理难以实现。而DTD 通过独特的语法,规定了XML文档编写应遵守的约束,也即是实现了对XML文档的规格化。

(2)DTD不符合XML语法有什么缺点?

DTD不遵守XML语法,也即是说写XML文档实例时候用一种语法,写DTD的时候用另外一种语法。缺点如下:①DTD数据类型有限②DTD不可扩展③DTD不支持命名空间。

XML学习之做过的实验——实验二相关推荐

  1. XML学习之做过的实验——实验五

    实验五 可扩展样式单语言XSL 一.实验目的 掌握使用XSL显示XML文件的基本方法 二.实验条件 配置有windows记事本.写字板 或 XMLSpy 开发环境的计算机设备. 三.实验原理及相关知识 ...

  2. 《Java 2 实用教程》课程学习(17)——《Java 程序设计》实验指导书-校内实验教材

    ****大学 <Java程序设计> 实验指导书 编者:王* 潘** 肖* 杨** 主审:刘** ********学院信息科学系 2013年1月9日 前  言 <Java 程序设计实验 ...

  3. FPGA系统性学习笔记连载_Day19【综合实验】之【数字钟】【Intel Cycle IV FPGA平台验证】

    FPGA系统性学习笔记连载_Day19[综合实验]之[数字钟][Intel Cycle IV FPGA平台验证] 本系列为FPGA系统性学习学员学习笔记整理分享,如有学习或者购买开发板意向,可加交流群 ...

  4. 深度学习 第3章线性分类 实验四 pytorch实现 Logistic回归 上篇

    目录: 第3章 线性分类 3.1 基于Logistic回归的二分类任务 3.1.1 数据集构建 3.1.2 模型构建 1. Logistic函数 2. Logistic回归算子 3.1.3 损失函数 ...

  5. [网络安全学习篇18]:ACL及实验(千峰网络安全视频笔记 18 day)

    引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...

  6. 计算机系统基础学习笔记(7)-缓冲区溢出攻击实验

    缓冲区溢出攻击实验 实验介绍 实验任务 实验数据 目标程序 bufbomb 说明 bufbomb 程序接受下列命令行参数 目标程序bufbomb中函数之间的调用关系 缓冲区溢出理解 目标程序调用的ge ...

  7. python显示圆周率的值是多少_用python做一个有趣的实验,看你的生日是否出现在圆周率中...

    原标题:用python做一个有趣的实验,看你的生日是否出现在圆周率中 前言: 看到圆周率这个词,突然冒出一个灵感怎么知道我的生日在不在圆周率的中又或者在第几位呢?带着这个想法去网上找了一堆数据,最后找 ...

  8. 入门必做的51单片机实验2----》利用外部中断的方法来控制发光二极管和共阴极数码管显示十六进制的0到F

    嘿!各位中午好! 我是肖肖的猪会飞 欢迎收看肖小猪频道 刚刚做了个单片机实验->ヽ( ̄ω ̄( ̄ω ̄")ゝ 分享一下 文章目录 前言 一,实验题目 二,程序 三,仿真效果 前言 此实验为 ...

  9. STM32CubeMX 学习(5)输入捕获实验

    个人学习记录 文章目录 一.新建工程 二.选择芯片型号 三.配置时钟 四.配置调试模式 五.定时器(输入捕获)参数配置 六.生成 Keil 工程 七.中断函数写在哪 八.测试示例 一.新建工程 二.选 ...

  10. 我做了开颅实验:从胼胝体切开术和额叶前部脑白质切断术聊一聊大分子编码说和老王谬论

    感谢大家对老王的脑洞谬论<人类记忆系统之谜,也许就是这么回事儿>下文简称"老王谬论"的关注和讨论,也感谢CSDN对此文的大力推荐,短短几天就有了数万的点击量.在[老王的 ...

最新文章

  1. 某大厂程序员哀叹:千万不要从大厂往小厂跳,后悔死了!小厂只会逼迫压榨,刚来就一个劲要产出!...
  2. Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组、split函数垂直拆分二维numpy数组
  3. SqlServer英文单词全字匹配
  4. Onenote 2010 多PC端笔记同步
  5. Fast digital I/O for Arduino
  6. 百雀羚、林清轩、逐本走红背后,植物基护肤品的春天来了?
  7. OpenCV使用蒙版mask过滤图像的实例(附完整代码)
  8. JS基础_强制类型转换-Number
  9. ntp时间同步服务器配置
  10. Strust2初之体验
  11. C语言:编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递
  12. 31.go 函数式编程
  13. 190119每日一句
  14. 小话设计模式(四)生成器模式
  15. 我如何构建一个交互式仪表板Web应用程序以可视化拳击数据
  16. 什么P图软件可以换发型?照片换分享软件分享
  17. 我的世界服务器修改皮肤指令,我的世界怎么拿指令来改皮肤的 | 手游网游页游攻略大全...
  18. Debian11之Docker稳定版本安装
  19. 【调度】经典作业车间调度问题VS柔性作业车间调度问题
  20. OpenCV-Python实战(4) —— OpenCV 五角星各点在坐标系上面的坐标计算(以重心为原点)

热门文章

  1. windows下Vue安装教程(超级详细,一些细节坑)
  2. matlab求线性规划最大值,matlab线性规划算例
  3. mysql 2008安装_关于SQL 2008安装时已经有实例名称。
  4. BI_DBA_安装(3):安装informatic
  5. 键盘按键的各种编码对照表
  6. 炫酷动漫游戏网站页面设计html页面前端源码
  7. html按钮功能的实现原理,触摸按键原理是什么 触摸按键原理介绍【图文详解】...
  8. php公众号支付开发,微信公众号支付开发
  9. 云南昆明企业等保合规安全解决方案、等保二级、等保三级解决方案
  10. 映美精两个相机同步采集求助