- 浏览: 317076 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
every:
真JB坑爹,标题redhat6 结果用的时5.3 ,尼玛标 ...
RedHat Linux 6企业版开启VNC Server远程桌面 -
okooo00:
五年光景蹉跎,最终还是烂尾了,从此人生又少了一样追求
《凡人修仙传》点评 -
mikey_5:
原来是这样子判断数据格式的,Thanks
POI读取Excel浅谈 -
jveqi:
tracy_meimei 写道楼主,我试过N多次了,在我的my ...
MyEclipse6.5 下Axis2插件的下载和安装 -
jsx112:
...
MySQL select into和SQL select into
DTD是Document Type Definition(文档类型定义)的缩写。它通过定义元素、属性、标记以及文档中的实体及其相互关系等规则来保证XML文档的合法性。
1.DTD的声明方式分为内部声明与外部声明
内部声明的格式是
<!ELEMENT 根元素 (元素1,元素2)>
<!ELEMENT 元素1 (#PCDATA)>
<!ELEMENT 元素2 (#PCDATA)>
]>
外部声明的格式分两种,对应的关键字为"SYSTEM"与"PUBLIC"
<!-- 这里的外部DTD文件,若不指明 绝对路径,则必须是和xml文件在同一目录,否则无效 -->
"PUBLIC"声明的DTD文件通常是一个由权威机构制订的,提供给特定行业或公众使用的DTD。
2.元素类型声明
DTD中使用的元素内容类型有:EMPTY、ANY、Mixed、Elements
EMPTY是指元素不能有任何的内容,但可以有属性:
<!ELEMENT 元素1 EMPTY>
<!ATTLIST 元素1 性别 (男|女) "男">
<!-- XML文件部分 -->
<元素1 性别="女" />
<!-- 这里若是以<元素1></元素1>的形式出现,即使里面没有任何数据,也会产生错误 -->
ANY说明元素可以有任何类型的子元素,也可以是纯文本,还可以为空
这里需要特别注意的是,虽然用ANY定义的元素可以包含其它元素,但必须遵循XML文件的"有效的"原则,即XML文件规定文件中所使用的任何元素都必须在DTD中给出定义
看下面这段非法的文件:
<!DOCTYPE 图书信息 [
<!ELEMENT 图书信息 ANY>
]>
<图书信息>
<书名>新概念英语</书名>
</图书信息>
编译器会提示这样一条错误信息
"This file is not valid: Element '书名' has not been declared."
就是提示"书名"这个元素没有经过定义,要纠正这个错误,只要在DTD定义部分加入定义语句"<!ELEMENT 书名 (#PCDATA)>"就可以了
Mixed允许混合内容使得字符数据和其他元素能在元素内共存,它并不是以关键字的形式存在的
<!DOCTYPE 图书信息 [
<!ELEMENT 图书信息 (#PCDATA|书名|价格)*>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
]>
<图书信息>
今日新到图书:
<书名>
XML实用教程
</书名>
<价格>
¥26.00
</价格>
</图书信息>
Elements规定特定子元素必须按规则与顺序出现,子元素后可以用各种元字符来说明出现的次数
<!ELEMENT 元素4 (子元素1,子元素2,子元素3)>
可能出现的元字符:
元字符 | 含义 |
+ | 出现1次或多次 |
* | 出现0次或多次 |
? | 出现0次或1次 |
无符号 | 只能出现1次 |
下面的例子中,"IT求职"的各项子元素必须按顺序和元字符说明的次数来出现
<!DOCTYPE IT求职 [
<!ELEMENT IT求职 (招聘信息)+>
<!ELEMENT 招聘信息 (公司名,招聘职位+,公司网站?,联系方式*)>
<!ELEMENT 公司名 (#PCDATA)>
<!ELEMENT 招聘职位 (#PCDATA)>
<!ELEMENT 公司网站 (#PCDATA)>
<!ELEMENT 联系方式 (#PCDATA)>
]>
<IT求职>
<招聘信息>
<公司名>中兴通讯</公司名>
<!--这里招聘职位出现了2次-->
<招聘职位>1.Java高级工程师</招聘职位>
<招聘职位>2.C++高级工程师</招聘职位>
<!--这里公司网站出现了1次-->
<公司网站>http://www.zte.com.cn/</公司网站>
<!--这里联系方式出现了2次-->
<联系方式>地址:深圳市南山区高新技术产业园科技南路中兴通讯大厦</联系方式>
<联系方式>电话:0755-26770000</联系方式>
</招聘信息>
<招聘信息>
<公司名>
阿里巴巴
</公司名>
<!--这里招聘职位出现了1次-->
<招聘职位>软件测试工程师</招聘职位>
<!--没有出现公司网站-->
<!--没有出现联系方式-->
</招聘信息>
</IT求职>
3.定义有效的元素属性
在DTD中定义属性时,我们采用下面的格式:
<!ATTLIST 元素名 属性名 (属性值 属性类型 缺省值)*>
例如:
<!ATTLIST 作者
姓名 CDATA #REQUIRED
性别 (男|女) "男"
联系方式 CDATA #IMPLIED
>
根据XML文件是否必须为一个属性提供取值,属性的缺省值又可以分为以下四类:
- 必须赋值的属性REQUIRED
- 属性值可有可无的属性IMPLIED
- 固定取值的属性FIXED
- 自定义的缺省值
下面用一个例子来说明这四类缺省属性
<!DOCTYPE 图书信息 [
<!ELEMENT 图书信息 (书名,作者,价格)*>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
<!ATTLIST 作者
姓名 CDATA #REQUIRED
性别 (男|女) "男"
联系方式 CDATA #IMPLIED
分类 CDATA #FIXED "WEB编程技术"
>
]>
<图书信息>
<书名>ASP.NET案例开发集锦</书名>
<作者 姓名="赵辉、杨丽敏"/>
<价格>37.00</价格>
<书名>C#高级编程</书名>
<作者 姓名="wrox" 联系方式="http://www.wrox.com"/>
<价格>128.00</价格>
<书名>HTML XHTML CSS基础教程(第6版)</书名>
<作者 姓名="Elizabeth Castro" 分类="WEB编程技术"/>
<价格>50.00</价格>
<书名>ASP.NET 2.0 应用开发技术</书名>
<作者 姓名="孟宪会(net_lover)" 性别="男"/>
<价格>59.00</价格>
</图书信息>
上面的例子为子元素"作者"定义了4个属性,分别是"姓名"(#REQUIRED类型)、"联系方式"(#IMPLIED类型)、"分类"(#FIXED类型)、"性别"(自定义类型)
在第一本书《ASP.NET案例开发集锦》中,只出现了"姓名",但其实际属性有两项,还有一个是#FIXED类型的"分类"
在第二本书《C#高级编程》中,除了必须出现的"姓名",还出现了#IMPLIED类型的"联系方式",算上#FIXED类型的"分类",实际属性有三项
在第三本书《HTML XHTML CSS基础教程(第6版》中,除了"姓名",还显式出现了#FIXED类型的"分类",它的实际属性与第一本书相同
在第四本书《ASP.NET 2.0 应用开发技术》中,"姓名"后出现了自定义属性"性别",它只有两个值"男"和"女",默认为"男",出现其他值将显示错误
属性类型分为以下10种:
- CDATA
- Enumerated
- ID
- IDREF
- IDREFS
- ENTITY
- ENTITIES
- NMTOKEN
- NMTOKENS
- NOTATION
CDATA和Enumerated(枚举类型)在上面的例子中已有所说明,主要研究一下其他的属性类型:
·ID属性类型
每个ID类型的属性必须有不同的值,大多数ID属性使用#REQUIRED,且ID类型和#FIXED不兼容.属性不能既是固定的,又有ID类型.这是因为#FIXED属性只能有一个值
看下面的错误示例:
<!DOCTYPE 职员信息 [
<!ELEMENT 职员信息 (普通职员)*>
<!ELEMENT 普通职员 (#PCDATA)>
<!ATTLIST 普通职员 编号 ID #REQUIRED>
]>
<职员信息>
<普通职员 编号="8">张三</普通职员>
<普通职员 编号="E8">李四</普通职员>
<普通职员 编号="E8">王五</普通职员>
</职员信息>
上面的文件有2个错误,一个是 编号="8" 这里,ID属性不能是纯数字,必须要以字母或下划线开头;另一个是出现了两个"E8"的编号,这与ID属性的定义是相违背的.
·IDREF属性类型
具有IDREF类型的属性的值是文档中另一个元素的ID
<!DOCTYPE 武将信息 [
<!ELEMENT 武将信息 (姓名)*>
<!ELEMENT 姓名 (#PCDATA)>
<!ATTLIST 姓名 编号 ID #REQUIRED>
<!ATTLIST 姓名 君主 IDREF #IMPLIED>
]>
<武将信息>
<姓名 编号="P1">曹操</姓名>
<姓名 编号="P2">刘备</姓名>
<姓名 编号="P3">孙权</姓名>
<姓名 编号="P4" 君主="P1">许楮</姓名>
<姓名 编号="P5" 君主="P2">关羽</姓名>
<姓名 编号="P6" 君主="P3">甘宁</姓名>
</武将信息>
上面的例子中,由于"君主"属性指定为IDREF,所以其内容必须为ID属性的"编号"里的值
·IDREFS属性类型
IDREF属性的值只能为一个.但如果要描述一对多的关系,例如三国里所有人都只有一个君主,但却会有多个子女.这时候就要用到IDREFS属性了
<!DOCTYPE 武将信息 [
<!ELEMENT 武将信息 (姓名)*>
<!ELEMENT 姓名 (#PCDATA)>
<!ATTLIST 姓名 编号 ID #REQUIRED>
<!ATTLIST 姓名 子女 IDREFS #IMPLIED>
]>
<武将信息>
<姓名 编号="C1">关平</姓名>
<姓名 编号="C2">关兴</姓名>
<姓名 编号="C3">孙策</姓名>
<姓名 编号="C4">孙权</姓名>
<姓名 编号="C5">孙尚香</姓名>
<姓名 编号="F1" 子女="C1 C2">关羽</姓名>
<姓名 编号="F2" 子女="C3 C4 C5">孙坚</姓名>
</武将信息>
·ENTITY属性类型
ENTITY类型属性使人们能把外部二进制数据(即外部未解析的普通实体)链接到文档,ENTITY属性的典型例子是一幅图像,该图像由来自与另一个URL的二进制数据组成
<!DOCTYPE 图像 [
<!ELEMENT 图像 EMPTY>
<!ATTLIST 图像 来源 ENTITY #REQUIRED>
<!ENTITY Logo SYSTEM "logo.gif">
]>
<图像 来源="&Logo;"/>
·ENTITIES属性类型
ENTITIES是ENTITY的复数形式.ENTITIES类型的属性值由空格分隔多个未解析的实体名称组成.每个实体名称引用一个外部的非XML数据源.这个方法的一个用途是轮流显示不同图片的幻灯片,如下所示:
<!DOCTYPE 幻灯片 [
<!ELEMENT 幻灯片 EMPTY>
<!ATTLIST 幻灯片 来源 ENTITY #REQUIRED>
<!ENTITY PIC1 SYSTEM "picture1.jpg">
<!ENTITY PIC2 SYSTEM "picture2.gif">
<!ENTITY PIC3 SYSTEM "picture3.jpg">
]>
<幻灯片 来源="&PIC1; &PIC2; &PIC3;"/>
·NMTOKEN属性类型
NMTOKEN属性类型限制有效的XML名称记号的属性值,除了空格,任何字符都被认为是有效的.
<!DOCTYPE 客户资料 [
<!ELEMENT 客户资料 (联系地址)*>
<!ELEMENT 联系地址 (#PCDATA)>
<!ATTLIST 联系地址 城市 NMTOKEN #REQUIRED>
]>
<客户资料>
<联系地址 城市="London">张三</联系地址>
<联系地址 城市="010北京">李四</联系地址>
<联系地址 城市="New York">王五</联系地址>
</客户资料>
上面的例子,"010北京"虽然是以数字开头,但由于是NMTOKEN类型,所以它也是合法的.但最后的"New York"为非法,因为NMTOKEN类型限制了空格的使用
·NMTOKENS属性类型
NMTOKENS是NMTOKEN的复数形式,它允许出现一组值,同NMTOKEN的规则一样,不限制符号的使用。它可以出现空格,但空格的作用是分割不同的记号
<!DOCTYPE 注册信息 [
<!ELEMENT 注册信息 (用户资料)*>
<!ELEMENT 用户资料 (#PCDATA)>
<!ATTLIST 用户资料 爱好 NMTOKENS #REQUIRED>
]>
<注册信息>
<用户资料 爱好="足球 篮球">张三</用户资料>
<用户资料 爱好="唱歌 跳舞">李四</用户资料>
<用户资料 爱好="Play the Piano">王五</用户资料>
</注册信息>
上面的例子虽然没有错误,但最后的"play the piano"本来想表达的意思是"弹钢琴",但由于NMTOKENS的限制,被拆解成了"play"、"the"、"Piano"三个部分。所以在遇到NMTOKENS类型属性时,要特别注意空格的使用。
·NMTOKENS属性类型
NOTATION对于使用非XML格式的数据非常有用。现实世界中存在很多无法或不易用XML格式组织的数据,例如图象、声音、影象等等。对于这些数据,XML应用程序常常并不提供直接的应用支持。通过为它们设定NOTATION类型的属性,可以向应用程序指定一个外部的处理程序
<!DOCTYPE 文件 [
<!ELEMENT 文件 (声音文件)>
<!ELEMENT 声音文件 (#PCDATA)>
<!NOTATION MP SYSTEM "mplayer32.exe">
<!NOTATION ST SYSTEM "soundtool">
<!NOTATION SM SYSTEM "Sound Machine">
<!ATTLIST 声音文件 处理程序 NOTATION (MP|SM|ST) #REQUIRED>
]>
<文件>
<声音文件 处理程序="MP">Lydia.mp3</声音文件>
</文件>
发表评论
-
Mina开发笔记
2014-12-08 20:08 0import java.nio.charset.Ch ... -
Excel中日期与数字的转换代码
2014-05-30 23:24 2784public static void main(St ... -
求一个月有几周
2013-02-22 18:19 1205int year = 2013; int month= ... -
The error is weblogic.descriptor.DescriptorException: Unmarshaller failed
2012-09-13 11:58 2331部署 web project 到weblogic92(换成10 ... -
ecllipse无法启动,一直停留刚开始启动界面
2012-07-18 11:47 24221、 故障发生原因 :由于电脑配置较差 ,经常死机 或者 ... -
启动JBOSS,提示错误1098端口被占用的解决方案
2012-06-25 10:25 1804问题:启动JBOSS,提示错误1098端口被占用 方案一: ... -
Version 1.3.1_01 of the JVM is not suitable for this product.Version:1.4.1 or gr
2012-05-30 17:06 1164Version 1.3.1_01 of the JVM is ... -
java.lang.AbstractMethodError: com.microsoft.jdbc.base.BaseDatabaseMetaData.supp
2012-04-10 21:51 1984java.lang.AbstractMethodError: ... -
org.apache.axis2.databinding.utils.BeanUtil.getPullParser错误
2012-03-28 12:56 1948在开发ssh+axis2的webservice应用中,报这个错 ... -
增加eclipse启动的Tomcat内存的
2011-09-30 10:04 8933JAVA程序启动时JVM都会分配一个初始内存和最大内存给这 ... -
java.lang.OutOfMemoryError: PermGen space及其解决方法
2011-09-26 10:02 12661、 PermGen space的全称 ... -
POI读取Excel浅谈
2011-09-24 15:30 3010先看代码,挨句解释: 一般遍历使用两种方式,1:得到总的行数 ... -
POI读取EXCEL教程
2011-09-24 14:22 1867一、Excel基础 二、HSSF概况 三、通过user ... -
有关java中的Date,String,Timestamp之间的转化问题
2011-09-22 17:10 1459一.获取系统当前时间: 1.System.out.print ... -
Hibernate温习(4)--三大类查询总结
2011-09-14 12:49 1381[url]Hibernate目前总共分为三大类查询:creti ... -
hibernate 关系映射 annotation 版
2011-09-06 16:29 1556关于mappedBy 双向关联 ... -
hibernate+spring 注解 对事务的一些信息
2011-09-06 16:27 1636事务注解说明@Transactional 类事务说明机制 ... -
JPA一对多,多对多映射
2011-09-03 23:46 4065JPA(Java Persistence API)是Sun ... -
Rational Rose 生成java代码
2011-08-25 10:26 1969一,正向工程 1、设置默认语言为Java,Tools- ... -
SOA服务设计原则-转载
2011-08-24 10:27 1148这一部分是有关整个 SOA 系统的指南,代表了在建立系统时需要 ...
相关推荐
在编写XML文件时,如果我们有对应的DTD文件,Eclipse可以提供代码补全、语法检查等便利功能,提高开发效率。以下将详细介绍这个过程: 1. **什么是DTD**: DTD是一种XML文档的规范,它定义了XML文档的合法元素、...
DOCTYPE>`声明中同时包含内部和外部DTD,允许部分规则在文档内定义,部分规则在外部文件定义。 **DTD的元素声明** 元素声明用于定义XML文档中可能出现的元素类型及其结构。例如: ```xml <!ELEMENT book (title, ...
使用DTD验证XML文档 ...a) DTD使每个XML文件可以携带一个自身格式的描述。 b) DTD使不同组织的人可以使用一个通用DTD用来交换数据。 c) DTD使应用程序可以使用一个标准DTD校验从外部接收的XML数据是否有效。
DTD实际上可以看作一个或多个XML文件的模板,这些XML文件中的元素、元素的属性、元素的排列方式/顺序、元素能够包含的内容等,都必须符合DTD中的定义。XML文件中的元素,即我们所创建的标记,是根据我们应用的实际...
- **外部DTD**:DTD作为单独的文件存在,并通过XML文档中的DOCTYPE声明来引用。适用于大型项目或多个文档共享相同的DTD规则的情况。 #### 五、DTD的声明 DTD声明总是以`<!DOCTYPE>`开头,后跟根元素的名称。内部...
在处理XML文件时,有时我们可能会遇到由于XML文档包含了对外部DTD(Document Type Definition)的引用,导致在使用`XmlDocument`或`XmlDataDocument`类加载文件时出现验证异常。DTD是XML的一个组成部分,用于定义XML...
DTD定义了XML文档的结构和规则,确保XML文件的正确性,使得解析器能够理解并处理这些文件。 标题中的"mybatis配置xml最新dtd文件"指的是MyBatis框架中使用的最新的XML配置文件所依赖的DTD文件。这些文件定义了...
3. **关联XML文件**:在Eclipse中打开需要关联DTD的XML文件,右键点击并选择`Properties`,然后在`XML Catalog`选项中,关联之前配置的DTD条目。这样,Eclipse就可以根据DTD文件提供自动提示了。 4. **验证XML文档*...
DTD(文档类型定义,Document Type Definition)是XML的一种验证机制,它定义了XML文档的结构和合法元素。DTD包含元素声明、属性声明、实体声明和notations声明。例如,一个简单的DTD声明可能如下: ```xml <!...
- **外部DTD**:定义在独立的DTD文件中,XML文档通过文档类型声明引用该文件。适用于大型或复杂的文档结构,便于复用和维护。 **内部DTD与外部DTD的联合使用** 在实际应用中,通常结合使用内部DTD和外部DTD,以实现...
- **XML文件** (`outer.xml`): ```xml <?xml version='1.0' encoding='gb2312'?> <!DOCTYPE poem SYSTEM "outer.dtd"> 王维 鹿柴 空山不见人, 但闻人语声. 返景入深林, 复照青苔上. ``` 3. **内部与...
3. `web-app_2_3.dtd`和`web-app_2_4.xsd`:这两个文件定义了Servlet容器(如Tomcat)中Web应用程序部署描述符`web.xml`的结构。`web.xml`是所有Servlet和Filter的注册中心,它定义了应用程序的初始化参数、安全配置...
在这个例子中,`SYSTEM`关键字后面跟的是外部DTD文件的URI,表明XML文档将遵循这个外部文件定义的规则。 除了`SYSTEM`,`<!DOCTYPE>`声明还可以使用`PUBLIC`关键字,这通常用于引用公共的DTD资源,例如: ```xml ...
DTD允许我们规范XML文件的结构,确保数据的准确性和一致性。本文将深入探讨如何通过外部DTD将DTD文件与XML文档关联起来,以便于管理和验证XML数据。 首先,我们需要理解什么是DTD。DTD是一系列声明,它定义了一个...
当XML文件包含DTD(Document Type Definition)声明时,DOM4J默认会尝试从指定的URL加载DTD文件来进行验证。这通常是为了确保XML文件符合预定的结构和规则。然而,在某些情况下,如离线环境或者网络连接不稳定的情况...
- **文件格式定义(DTD)**:DTD全称为Document Type Definition,用于定义XML文档的合法构建模块,确保XML文件的结构正确性。DTD可以包含以下元素: - **元素**:定义文档中允许的元素及其结构。 - **属性**:...
在提供的文件列表中,有`书籍.dtd`和`出版社.dtd`,这些可能是定义不同类型的XML文档结构的DTD文件。例如,`书籍.dtd`可能定义了描述书籍信息的元素和属性,而`出版社.dtd`可能定义了描述出版社信息的元素。 `Main....
总的来说,这些文件涵盖了XML的基础知识,如XML结构、DTD的使用、XSLT转换以及DOM解析,同时也涉及到XML Schema这一高级验证工具。通过学习这些资料,你将能够有效地创建、验证和处理XML文档,以及进行数据的格式...
DTD 可以在 XML 文档内部定义,也可以通过外部文件的方式引入。 首先,我们来看一下 DTD 的语法。内部声明方式,如果要把 DTD 包含在你的 XML 内部,需要以以下的语法包含一个“DOCTYPE”声明:`<!DOCTYPE 根元素 ...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等领域。在本主题中,我们将深入探讨如何利用DTD(Document Type Definition)和XML Schema来设计一个表示图书...