写外部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="1"><name>王同</name><course>java</course><score>89</score></student><student id="2"><name>李佳</name><course>sql</course><score>58</score></student><student id="3"><name>王二狗</name><course>经济学原理</course><score>88</score></student><student id="4"><name>刘德华</name><course>怎样做一个好演员</course><score>100</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 shouldbe addressed to "support@vervet.com" or visit ourweb 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 #IMPLIEDCATEGORY (HandTool | Table | Shop-Professional) "HandTool"PARTNUM CDATA #IMPLIEDPLANT (Pittsburgh | Milwaukee | Chicago) "Chicago"INVENTORY (InStock | Backordered | Discontinued) "InStock"><!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS WEIGHT CDATA #IMPLIEDPOWER 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 #IMPLIEDWHOLESALE CDATA #IMPLIEDSTREET CDATA #IMPLIEDSHIPPING 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>


转载于:https://www.cnblogs.com/yibeimingyue/p/9961546.html

作业:xml练习2-写.xml的外部约束文件(dtd文件)相关推荐

  1. 使用Intellij IDEA创建XML文件, DTD文件和XML Schema文件

    优质文章推荐,适合零基础小白XML入门(从是什么到怎么用) 创建XML文件 在我们要使用IDEA创建xml文件的时候,却发现并没有xml文件的这个选项,那我们就来构建一个xml模板 File -> ...

  2. struts2中struts.xml的http://struts.apache.org/dtds/struts-2.3.dtd文件路径

    struts-2.3.35\src\core\src\main\resources\ 转载于:https://www.cnblogs.com/jichen/p/9767671.html

  3. tinyxml 读取文本节点_【C++】【TinyXml】xml文件的读写功能使用——写xml文件

    TinyXml工具是常用比较简单的C++中xml读写的工具 需要加载 #include "TinyXml\tinyxml.h" 在TinyXML中,根据XML的各种元素来定义了一些 ...

  4. JAVA写XML乱码问题_java 写 xml 中文乱码

    今天用java写xml文件,发现写完后xml文件的中文就变成了乱码, 解决办法:把xml文件的头部编码改为utf-8,StreamResult编码方式也改为utf-8. =============部分 ...

  5. tinyxml语法讲解之写xml

    TinyXml 简介 Qt+TinyXML 环境搭建 环境搭建 TinyXML 框架解析 DOM 对象模型 类图关系 常用接口 写 XML TinyXml 简介 TinyXML 是一个开源的解析 XM ...

  6. SpringBatch 写xml文件(StaxEventItemWriter)用法(十四)

    文章目录 一.pom文件引入需要读取xml文件jar包 二.抽取写xml文件公共writer 三.processor 四.配置写xml文件job 五.执行job 前言:在一些业务场景中,可能需要读取x ...

  7. 【C++】【TinyXml】xml文件的读写功能使用——写xml文件

    TinyXml工具是常用比较简单的C++中xml读写的工具 需要加载 #include "TinyXml\tinyxml.h" 在TinyXML中,根据XML的各种元素来定义了一些 ...

  8. 02_Android写xml文件和读xml文件

     新建Android项目 编写AndroidManifest.xml,使本Android项目具有单元测试功能和写外设的权限. <?xml version="1.0" en ...

  9. python 写xml_使用python 写xml文件

    ''' 开发一个给大百度的接口,各种要求,写一个xml文件,倒是不是很难 ''' import xml,datetime,codecs import xml.dom.minidom as minido ...

  10. mysql通用mapper_SpringBoot集成tk.mapper通用mapper,针对特殊业务也可写xml文件sql

    首先创建项目一个maven项目引入如下依赖 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache ...

最新文章

  1. 批量删除注册表特定键值的小技巧
  2. SVM+HOG:从完全不包含人体的图片中随机剪裁出64*128大小的用于人体检测的负样本
  3. C语言学习之1到10的奇数相乘1到10的偶数相乘
  4. redhat linux加密卷
  5. WINCE中设置FTP用户密码
  6. 【树莓派学习笔记】五、处理、自动重命名并另存为图片
  7. eslint关闭===替换==;eslint关闭全等于校验;eslint关闭==校验
  8. php学籍信息管理系统心得_php实现学生管理系统
  9. 八、IO优化(7)减少IO竞争
  10. php使用redis作为消息队列
  11. 毕业设计——基于SSM的JAVA图书管理系统(有图书管理前台+后台)
  12. 数据库练习题归纳整理
  13. 第08篇:Mybatis事务处理
  14. linux安装lsi raid卡驱动下载,【LSIRAID卡驱动下载】LSIRAID卡官方驱动程序下载
  15. Delphi对象克隆技术
  16. 【bat】 创建一个文件的快捷方式
  17. 逆商助你回顾2019年迎面2020年
  18. python入门 数据类型(七种数据类型,序列,元素)
  19. 广州车展直击:现代汽车携豪华阵容共建未来汽车生态圈
  20. Dubbo结合Gateway实现微服务网关

热门文章

  1. NYOJ-111分数加减法
  2. Dubbo的架构体系
  3. Springboot -- 由于jar版本不匹配遇到的问题
  4. Session和EL表达式实现登陆验证
  5. activiti processEngineLifecycleListener使用
  6. 算法学习之路|程序运行时间
  7. java int转integer方法
  8. Spring.net(一)----Spring.NET框架简介及模块说明
  9. g++编译支持c++11
  10. 压力测试神器stresstester源码分析