写外部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文件)的更多相关文章

  1. 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 ...

  2. 可扩展标记语言XML之二:XML语言格式规范、文档组成

    大家好,小乐又来了,好久不见!这次接着上次可扩展标记语言XML之一:XML概念,作用,示例,继续讲述XML. 一.格式良好的 xml 1.语法规范: 1).必须有 XML 文档声明: <?xml ...

  3. 使用XmlWriter写Xml

    假定创建了XmlWriter的实例变量xmlWriter,下文中将使用此实例变量写Xml 1.如何使用XmlWriter写Xml文档声明 ? // WriteStartDocument方法可以接受一个 ...

  4. 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 ...

  5. PLSQL_PLSQL读和写XML文件方式(案例)

    2012-05-01 Created By BaoXinjian

  6. python写xml文件

    为了便于后续的读取处理,这里就将信息保存在xml文件中,想到得到的文件如下: 1 <?xml version="1.0" encoding="utf-8" ...

  7. C#操作Xml:使用XmlWriter写Xml

    假定创建了XmlWriter的实例变量xmlWriter,下文中将使用此实例变量写Xml 1.如何使用XmlWriter写Xml文档声明 ? // WriteStartDocument方法可以接受一个 ...

  8. XXE(XML External Entity attack)XML外部实体注入攻击

    导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...

  9. python写xml及几个问题

    python写xml的库和用法 几个问题: 1.乱码问题 设写入UTF-8编码 write函数增加encoding='utf-8' 2.空元素xml节点简写及完整写 write函数增加 short_e ...

随机推荐

  1. vbox在共享文件夹设置链接报错Protocol error问题

    环境: 基于VBox 的 vagrant (centos版本)开发环境. 问题: Virtualbox 虚拟机(centOS)中,在进行go程序编译的时候,需要设置一个链接符,然后得到了如下的错误: ...

  2. 7.【nuxt起步】-Nuxt与后端数据交互

    接下来就是对接服务端接口,展示真实的数据 1.做了个虚拟接口地址:http://test.yms.cn/testjson.asp 输出数据: { "title": "单间 ...

  3. 我是如何通过CSRF拿到Shell的

    织梦内容管理系统(DedeCms) 以简单.实用.开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历多年的发展,目前的版本无论在功能,还是在易用性方面,都有 ...

  4. Java代理学习笔记

    代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关 ...

  5. C#应用程序配置文件.config介绍

    我们经常会希望在程序中写入一些配置信息,例如版本号,以及数据库的连接字符串等.你可能知道在WinForm应用程序中可以利用Properties.Settings来进行类似的工作,但这些其实都利用了Ap ...

  6. XPath可以快速定位到Xml中的节点或者属性。XPath语法很简单,但是强大够用,它也是使用xslt的基础知识。

    示例Xml: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <?xml versio ...

  7. c++ 操作Mysql ado

    #pragma once #ifndef DB_MYSQL_H #define DB_MYSQL_H   #include "stdafx.h" #include <wins ...

  8. vs 编译错误 The name 'InitializeComponent' does not exist in the current context in WPF application

    1:文件命名空间的问题 xaml文件和model.cs文件的命名空间 2:csproj 那么它究竟是给谁用的呢?那是给开发工具用的,例如我们在熟悉不过的Visual Studio,以及大家可以没有接触 ...

  9. android arcmenu

    http://www.kankanews.com/ICkengine/archives/129193.shtml

  10. iOS设备控制打印机输出文本

    本文转载至 http://tec.5lulu.com/detail/108krn1e6e66m8sbd.html 让我们来看看是如何实现的吧,首先要知道打印机的ip地址,然后用socket通过打印机的 ...