XML DTD验证
一、什么是DTD
文档类型定义(DTD:Document Type Definition)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
二、DTD的作用
1、有了DTD,每个XML可以携带一个自身格式的描述。
2、有了DTD,不同组织可以使用一个通用的DTD来交换数据。
3、应用程序中使用DTD校检从外部接受的XML数据是否有效。
三、DTD中包含的内容
1、元素的定义规则:在DTD中需要验证XML中能包含哪些元素。
2、元素之间的关系规则:指元素的父元素是谁,元素和元素之间到底是上下层关系还是平行关系。
3、属性的定义:可以规定在XML中属性名是什么,属性值是什么类型。
四、DTD的分类:
1、内部DTD文档:DTD文档和XML文档在同一个文件中。
<!DOCTYPE 根元素 [定义内容]>
2、外部DTD文档:DTD文档和XML文档保存在不同文件中。
<!DOCTYPE 根元素 SYSTEM "DTD文件路径">
3、内外结合的DTD文档:两种相结合的写法。
<!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>
五、DTD元素定义
语法:
<!ELEMENT NAME CONTENT>
ELEMENT:关键字,表示声明一个DTD文档。
NAME:元素名称,XML中元素的名称。
CONTENT:元素类型,
元素类型包括:EMPTY、#PCDATA、纯元素类型、ANY。
1、Empty:
该元素不能包含子元素和文本,但可以有属性(空元素)。
语法:
<!ELEMENT 元素名称 EMPTY>
例:声明一个空的student元素
<!ELEMENT student empty>
XML示例:
<student />
2、#PCDATA:
可以包含任何字符数据,但不能包含其他子元素。只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:
语法:
<!ELEMENT 元素名称 (#PCDATA)>
例:声明一个name的元素
<!ELEMENT name (#PCDATA)>
XML示例:
<name>张三</name>
3、纯元素类型:
只能包含子元素,不能包含文本。元素出现的顺序必须和定义一致。
语法:
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>
例:声明学生标记
<!ELEMENT student(name,age)>
XML示例:
<student>
<name>张三</name>
<age>18</age>
</student>
符号的用途:
| 符号 | 用途 | 示例 | 说明 |
| () | 用来给元素分组 | (古龙|金庸|梁羽生),(王朔|余杰),毛毛 | 分为三组 |
| | | 在列出的对象中必须选择一个 | (男人|女人) | 表示男人或者女人必须出现,两者至少出现其一。 |
| , | 对象必须按照指定的顺序出现 | (西瓜,苹果,香蕉) | 表示西瓜、苹果、香蕉必须出现,并且是按照指定顺序出现。 |
| * | 该对象可以出现0次或者多次 | (爱好*) | 爱好可以出现0次到多次 |
| ? | 该对象只能出现0到1次 | (菜鸟?) | 表示菜鸟可以出现0次到1次 |
| + | 改对象可以出现1到多次。 | (成员+) | 表示成员必须出现1次到多次。 |
4、ANY:
可以包含任何元素类型。
语法:
<!ELEMENT 元素名称 ANY>
例子:
<!ELEMENT student ANY>
例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE studentlist [
<!--声明根元素下可以包含多个student元素-->
<!ELEMENT studentlist (student*)>
<!--声明student下可以包含name,age,sex元素,name必须出现0-1次, age出现0-多次,sex必须出现1次 -->
<!ELEMENT student (name?, age*, sex)>
<!--声明name中只能包含文本,不能包含其他标记-->
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!--声明sex为空元素-->
<!ELEMENT sex EMPTY>
]>
<studentlist>
<student>
<name>张三</name>
<age>20</age>
<sex/>
</student>
<student>
<name>李四</name>
<sex/>
</student>
</studentlist>

六、DTD中属性的定义
语法:
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
说明:
ATTLIST:属性列表关键字。
元素名称:要修饰的元素名称。
属性名称:元素谁能够的名称。
属性类型:CDATA、ID、IDREF/IDREFS、Enumerated。
属性特点:#REQUIRED、#IMPLIED、#FIXED value、Default value。
1)#REQUIRED:表示元素属性都必须有该属性的值,不能为空。
2)#IMPLIED:表示元素属性可以忽略的值,可以为空。
3)#FIXED value:表示元素属性必须为指定的固定值,固定值在value中指定。
4)Default value:表示给指定元素默认值,不需要使用Default,直接指定默认值即可。
属性类型:
1、CDATA属性
表示属性值可以是任何字符,包括数字和中文。
示例:声明student属性name值为任何文本,必须有值
DTD示例:
<!ATTLIST student name CDATA #REQUIRED>
XML示例:
<student name="zhangsan" />
2、ID属性
表示属性取值必须是唯一的
示例1:对studentid属性设置为唯一值。并且必须有值。
DTD示例:
<!ATTLIST student id ID #REQUIRED>
XML示例:
<student id="10086" />
示例2:同时对多个属性设置属性,对student的id
DTD示例:
<!ELEMENT student (id,name)>
<!ATTLIST student
id ID #REQUIRED
name CDATA #REQUIRED>
XML示例:
<student id="10086" name="zhangsan"></student>
3、IDREF/IDREFS
IDREF:表示该属性的值指向其他地方声明的ID类型的值。
IDREFS:同IDREF,但是可以由空格分开多个引用。
示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE categories [
<!ELEMENT categories (category*)>
<!ELEMENT category (category*)>
<!ATTLIST category
id ID #REQUIRED
name CDATA #REQUIRED
parentid IDREF #IMPLIED> <!--子类中的parentid引用外层的id-->
]>
<categories>
<category id="c_1" name="电器">
<category id="c_10" parentid="c_1" name="电视"/>
<category id="c_11" parentid="c_1" name="冰箱"/>
<category id="c_12" parentid="c_1" name="冰箱"/>
</category>
<category id="c_2" name="手机">
<category id="c_20" parentid="c_2" name="智能手机"/>
<category id="c_21" parentid="c_2" name="非智能手机"/>
</category>
</categories>

4、Enumerated
枚举,预定义一些值,属性的值必须在所列出的值得范围类。
DTD示例:学生性别只能是男或者女
<!ATTLIST student sex (男|女) #REQUIRED>
XML示例:
<student sex="男">
七、实体
在DTD中定义的常量,在XML中使用。用于定义在XML中多次出现的值。
实体可以分为内部实体和外部实体:
1、内部实体
语法:
<!ENTITY 实体名 "实体值">
示例:定义
DTD示例:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
XML示例:
<author>&writer;©right;</author>
注意:一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
2、外部实体
语法:
<!ENTITY 实体名称 SYSTEM "URI/URL">
DTD 例子:
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
XML 例子:
<author>&writer;©right;</author>
XML DTD验证的更多相关文章
- XML组成结构以及C#通过DTD验证规范性
XML 文档包含元素和属性等,它们提供一种灵活且功能强大的方法,为应用程序和组织之间交换数据.所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成: 1.元素 元素是XML的主要构建 ...
- DTD验证XML文档
DTD验证XML文档 1.DTD简介:DTD是Document Type Definition的缩写,即文档定义 1.1:DTD的内容包含: ...
- dom4j解析xml时取消DTD验证
解决方式整合一下,就分两种: 1.用setFeature() SAXReader reader = new SAXReader();reader.setValidation(false); reade ...
- 关于XML的验证(DTD与XSD)一点实践
[转自] http://blog.chinaunix.net/uid-276853-id-366491.html 关于XML的验证一点实践 1)此方法是在XML文档中绑定对应的DTD文件来进行的 // ...
- Eclipse关闭XML文件验证的方法
XML的编写是否符合规范,可以通过XML Schema或DTD进行验证,但有时候电脑本来就很卡,而且XML的某些错误并未导致程序无法运行的情况下,暂时关闭XML的验证也算不错的选择. 如web.xml ...
- XML的验证模式
XML文件的验证模式保证了XML文件的正确性,而比较常用的验证模式有两种:DTD和XSD. DTD与XSD区别 DTD(Document Type Definition)即文档类型定义,是一种XML约 ...
- XML Schema验证
XML Schema验证 一.什么事Schema(XSD) XML Schema是微软定义的一套用来验证XML技术.是一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模 ...
- udp开发-dtd验证,dom解析
//博主太懒了,并没有提供范例程序 6.基于UDP开发 (1)发送方:socket->准备数据包 DatagramSocket docket = new DatagramSocket(); // ...
- XML&DTD&XML Schema学习
XML(eXtensible Markup Language)可扩展的标记语言.xml在web service编程中尤为重要.在网络传输中可以作为传输数据的载体.xml作为元语言,它可以用来标记数据. ...
随机推荐
- HDU1896Stones(优先队列)
地址http://acm.hdu.edu.cn/showproblem.php?pid=1896 题目大一比较简单,就是说在一条直线道路上有n个石头,往前走,遇到一个数一个,如果遇到的是第奇数个那就把 ...
- WIN7建立wifi热点及无法启动承载网络的解决办法
1,根据网络共享的方法,最简单莫过于利用Win7的虚拟网卡来做热点,而不用借助其他软件. 首先,用管理员身份打开CMD命令提示符,输入 netsh wlan set hostednet ...
- jquery操作复选框(checkbox)
1.获取单个checkbox选中项(三种写法)$("input:checkbox:checked").val()或者$("input:[type='checkbox']: ...
- ActiveMQ简介与安装
开源消息总线 支持JMS1.1和J2EE 1.4规范的 JMS Provider实现(持久化,XA消息,事务) 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去 支持 ...
- (剑指Offer)面试题22:栈的压入、弹出序列
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- 为什么iphone手机比android手机流畅
作为当下最流行.市场占用份额最大的两大手机操作系统IOS和android,目前两者加起来的市场占用率达到90%.我曾经一直用android手机,没有用过iphone,那时候正直iphone4和ipho ...
- 解决Unable to connect to a repository at URL 禁止访问 (forbidden)
连接SVN报如下错误. Unable to connect to a repository at URL 禁止访问 (forbidden) 1. 右键点击本地副本,TortoiseSV ...
- Flume-NG + HDFS + HIVE 日志收集分析
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 无法将类型为 excel.applicationclass 的 com 强制转换为接口类型 的解决方法。
今天碰到客户的电脑在导出EXCEL的时候提示,无法将类型为 excel.applicationclass 的 com 强制转换为接口类型 excel._application 的问题 最后用下面的方法 ...
- HDU 5597 GTW likes function 打表
GTW likes function 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5596 Description Now you are give ...