作业:xml练习2-写.xml的外部约束文件(dtd文件)
写外部DTD:
步骤:
1.在srd目录下新建DTD文件,并命名为:scores.dtd
2.在练习1的基础上,剪切练习1的DTD内部声明。粘贴到一个新建的DTD文件中。剪切之后的地方换上:包含外部DTD的声明语句:<!DOCTYPE scores SYSTEM "scores.dtd">,新建的引入外部DTD文件的xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入外部DTD文件 -->
<!DOCTYPE scores SYSTEM "scores.dtd">
<scores>
<student id="">
<name>王同</name>
<course>java</course>
<score></score>
</student>
<student id="">
<name>李佳</name>
<course>sql</course>
<score></score>
</student>
<student id="">
<name>王二狗</name>
<course>经济学原理</course>
<score></score>
</student>
<student id="">
<name>刘德华</name>
<course>怎样做一个好演员</course>
<score></score>
</student>
</scores>
3.其中,scores.dtd文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT scores (student+)>
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>
4.一个可能要注意的地方是,当引入外部约束文件DTD文件之后,.xml文件就要包含元素name,course,score 了,如果在.xml文件中删去<score>100</score> 这一行,会报错(必须匹配name,course,score),如果没报错,把文件保存一下就行了。
下面是来自韩顺平老师上课的例子1(xml文件及其对应的约束文件):
1.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!--文件名:学生信息管理 -->
<!--关键字'SYSTEM'代表.DTD文件来源于当前系统,而不是来源于网络 -->
<!DOCTYPE 班级 SYSTEM "学生信息管理.dtd">
<班级>
<学生 地址="香港"
学号="tj1710008"
大哥="tj1710009 tj1710008"
性别="男"
>
<姓名>刘德华</姓名>
<年龄>23</年龄>
<简单介绍>学习刻苦!</简单介绍>
</学生>
<学生 地址="台湾"
学号="tj1710009"
大哥="tj1710008 tj1710009"
性别="女"
>
<姓名>林志玲</姓名>
<年龄>22</年龄>
<简单介绍>学习刻苦!认真听讲!</简单介绍>
</学生>
</班级>
2.对应的dtd约束文件:
<?xml version="1.0" encoding="UTF-8"?>
<!--文件名:学生信息管理 -->
<!ENTITY % myname "姓名"> <!--对于文件中多次出现的长字串,可以定义参数实体去替换 -->
<!ELEMENT 班级 (学生+)>
<!ELEMENT 学生 (%myname;,年龄,简单介绍)> <!--对于文件中多次出现的长字串,可以定义参数实体去替换 -->
<!--"#REQUIRED"代表属性值是"必须"的 -->
<!--"地址"这两个字是属性名字,是可以自定义的 -->
<!--"ID"代表学号的属性值惟一,不可重复 -->
<!--"DREFS"代表大哥的属性值是参考其他属性(学号)的属性值,DREF加个"S"代表可以有多个参考 -->
<!--"(男|女)"代表是枚举,性别的属性值只能从括号中的值里面选择-->
<!ATTLIST 学生
地址 CDATA #REQUIRED
学号 ID #REQUIRED
大哥 IDREFS #REQUIRED
性别 (男|女) #REQUIRED
>
<!--(#PCDATA)代表简单介绍可以是任何文本 -->
<!ELEMENT %myname; (#PCDATA)> <!--对于文件中多次出现的长字串,可以定义参数实体去替换 -->
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 简单介绍 (#PCDATA)>
<!--引用实体在dtd文件里面定义,在xml文件中使用,最好定义在最后面,目的是给一串字符串起个别名-->
<!ENTITY mycopy "我的公司版权">
<!--此时"我的公司版权"这一个长字符串在xml文件里面可以用"mycopy"代替,如果需要引用这个长字串的话-->
例子2:
1.dtd文件:
<!-- the filename is catalog.dtd -->
<!-- A Sample Product Catalog DTD --> <!-- This sample file is provided by Vervet Logic,
for tutorial use with XML Pro. Questions should
be addressed to "support@vervet.com" or visit our
web site at http://www.vervet.com
--> <!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com"> <!ELEMENT CATALOG (PRODUCT+)> <!ELEMENT PRODUCT (SPECIFICATIONS+, OPTIONS?, PRICE+, NOTES?)>
<!ATTLIST PRODUCT NAME CDATA #IMPLIED
CATEGORY (HandTool | Table | Shop-Professional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh | Milwaukee | Chicago) "Chicago"
INVENTORY (InStock | Backordered | Discontinued) "InStock"> <!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED> <!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS FINISH (Metal | Polished | Matte) "Matte"
ADAPTER (Included | Optional | NotApplicable) "Included"
CASE (HardShell | Soft | NotApplicable) "HardShell"> <!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED> <!ELEMENT NOTES (#PCDATA)>
2.对应的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!--the filename is 产品.dtd -->
<!DOCTYPE CATALOG SYSTEM "catalog.dtd">
<CATALOG>
<PRODUCT CATEGORY="HandTool" INVENTORY="InStock" NAME="得胜" PARTNUM="abc" PLANT="Chicago">
<SPECIFICATIONS WEIGHT="150KG" POWER="3000瓦">这里放说明书。</SPECIFICATIONS>
<OPTIONS FINISH="Matte" ADAPTER="Included" CASE="HardShell">这里是操作说明。</OPTIONS>
<PRICE>整机价格:RMB12000</PRICE>
<NOTES>这里写注意事项!</NOTES>
</PRODUCT>
</CATALOG>
作业:xml练习2-写.xml的外部约束文件(dtd文件)的更多相关文章
- xml语法、DTD约束xml、Schema约束xml、DOM解析xml
今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...
- 可扩展标记语言XML之二:XML语言格式规范、文档组成
大家好,小乐又来了,好久不见!这次接着上次可扩展标记语言XML之一:XML概念,作用,示例,继续讲述XML. 一.格式良好的 xml 1.语法规范: 1).必须有 XML 文档声明: <?xml ...
- 使用XmlWriter写Xml
假定创建了XmlWriter的实例变量xmlWriter,下文中将使用此实例变量写Xml 1.如何使用XmlWriter写Xml文档声明 ? // WriteStartDocument方法可以接受一个 ...
- C#操作XML(读XML,写XML,更新,删除节点,与dataset结合等)【转载】
已知有一个XML文件(bookstore.xml)如下: Corets, Eva 5.95 1.插入节点 往节点中插入一个节点: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- PLSQL_PLSQL读和写XML文件方式(案例)
2012-05-01 Created By BaoXinjian
- python写xml文件
为了便于后续的读取处理,这里就将信息保存在xml文件中,想到得到的文件如下: 1 <?xml version="1.0" encoding="utf-8" ...
- C#操作Xml:使用XmlWriter写Xml
假定创建了XmlWriter的实例变量xmlWriter,下文中将使用此实例变量写Xml 1.如何使用XmlWriter写Xml文档声明 ? // WriteStartDocument方法可以接受一个 ...
- XXE(XML External Entity attack)XML外部实体注入攻击
导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...
- python写xml及几个问题
python写xml的库和用法 几个问题: 1.乱码问题 设写入UTF-8编码 write函数增加encoding='utf-8' 2.空元素xml节点简写及完整写 write函数增加 short_e ...
随机推荐
- springboot快速集成swagger
今天技术总监说:小明,我们本次3.0改造,使用swagger2.0作为前后端分离的接口规范,它可以一键生成前后端的API,一劳永逸--小明:??? Spring Boot 框架是目前非常流行的微服务框 ...
- SpringMVC整合fastdfs-client-java实现web文件上传下载
原文:http://blog.csdn.net/wlwlwlwl015/article/details/52682153 本篇blog主要记录一下SpringMVC整合FastDFS的Java客户端实 ...
- Android图片缓存之Lru算法(二)
前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...
- docker 如何清理垃圾呢
应用容器在宿主机上长期运行,应用实例启停容器,会产生大量的停止的容器,无容器使用的数据卷.网络配置,无容器依赖的镜像,这些垃圾日积月累,会影响到宿主机的运行状态,造成机子卡顿等现象.因此,需要对这些宿 ...
- 【spring data jpa】repository中使用@Query注解使用hql查询,使用@Param引用参数,报错:For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on
在spring boot中, repository中使用@Query注解使用hql查询,使用@Param引用参数 如题报错: For queries with named parameters you ...
- C#应用程序配置文件.config介绍
我们经常会希望在程序中写入一些配置信息,例如版本号,以及数据库的连接字符串等.你可能知道在WinForm应用程序中可以利用Properties.Settings来进行类似的工作,但这些其实都利用了Ap ...
- 百度地图之标注一组地理坐标<2>
一.需求 开发移动地图相关的应用有时会有这种需求:在地图上显示自己的定位,然后想查看周边使用这个应用的有哪些人.当然完毕这个功能须要后台数据的支持.你要把自己的位置信息发给后台,后台在依据你的位置查询 ...
- 一起talk C栗子吧(第八十四回:C语言实例--使用信号进行进程间通信一)
各位看官们,大家好,上一回中咱们说的是进程间通信的样例.这一回咱们说的样例是:使用信号进行进程间通信.闲话休提,言归正转. 让我们一起talk C栗子吧! 我们在上一回中提到过进程之间通信须要解决的三 ...
- JD笔试试题(凭记忆写的+人生感悟 try finally )
京东笔试:技术篇(一套卷.包含測试.算法,研发) 一:填空题(4分 * 15) 15 个 涉及的面很广的选择题,可是比較側重基础.包含数据结构的.c++类的,操作系统的,计算机网络的. 二:编程题(2 ...
- UVA 11578 - Situp Benches(dp)
题目链接:11578 - Situp Benches 题意:健♂身♂房有两个仰卧起坐坐垫,每次调整角度要花费10元/10度,每次使用要花费15,如今给定n个人的时间顺序,和所希望的角度,求最少花费 思 ...