如何实现将DTD文档与XML文件相互关联的应用示例
- 格式:pdf
- 大小:130.55 KB
- 文档页数:3
DTD规范汽车特征XML文档
DTD不仅可以规范XML元素的层次关系及出现频度,而且也可以规范XML 文档的属性。
元素内容描述目标数据的主要信息,而元素属性描述目标数据的附加信息,通过使用元素属性可以增加XML文档的数据容量而不干扰XML文档的核心数据。
使用DTD规范XML文档中元素的属性步骤如下所示:
(1)在本练习中,将对具体汽车进行描述,这是汽车基本特征有颜色、车门数量、车轮数量、座位数等特征;而汽车制造商、经销商等信息等附加信息。
在新
车颜色车门数量等感官信息,这些信息是购车者首先接触的信息。
而汽车制造商等信息则需要作为属性出现在XML文档中。
图3-2 汽车特征信息。
JSP XML 使用DTD规范XML文档
DTD可以指定用在XML文档中的元素、属性和实体,以及这三者之间的联系等,使XML文档具有预定义的逻辑层次结构,从而更容易实现数据共享。
本练习使用DTD来规范XML文件的学生信息。
具体步骤如下所示:
(1)确定与学生有关的核心信息。
与学生有关的信息可以有很多,这里可以简化为包括信息有:姓名、编号、性别、年龄等信息。
(2)编写DTD文件。
学生是学校中的一员,具有层次结构,所以通过班级把
在上述声明中规定,根过元素为“学校”,“学校”可以有一个或多个“班级”子元素,同时“学校”也有自己的属性“编号”;“班级”可以有一个或多“学生”子元素,“班级”也有自己的属性“编号”;同样“学生”可以包含子元素“姓名”、“性别”、“年龄”各一个,同时“学生”也有自己的属性“编号”。
(3)编写XML文档。
在与student.dtd文件所在的目录下创建XML文件:stu
上述XML文件中引用外部DTD规范,使用浏览器中打开XML文档,如图7-21所示。
图7-21 学生信息。
DTD规范XML文档DTD是一套关于标记的语法规则,它定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。
一引入DTD(3种方式)1 内部DTD——内部的DTD紧跟在XML声明和处理指令之间。
< ? xml version=”1.0” encoding=”GB2312” standalone=”yes” ?><! DOCTYPE 根元素名称 [<! ELEMENT 子元素名称 (#PCDATA)>]>2 外部DTD外部文件类型定义存在于独立文件中,文件扩展名为“dtd”。
外部DTD的了处:可以方便地被多个XML文档共享,只需要定义一份DTD文档,即可为多个XML文档定义语义约束。
<!DOCTYPE 根元素名 SYSTEM " DTD-URL ">SYSTEM:关键字,指该外部DTD是私有的DTD-URL:通过URL将外部DTD引用到XML文档中,可以是绝对地址也是可以相对地址。
3公用DTD<!DOCTYPE 根元素名 PUBLIC " DTD-NAME ““DTD-URL”>公用DTD与外部DTD区别在于:公用DTD使用PUBLIC代替了原来的SYSTEM,并增加了DTD标识名。
二 DTD文档的结构<?xml version="1.0" encoding="UTF-8"?> DTD声明部分,DTD注释与XML 注释的语法完全相同<!ELEMENT …>定义一个XML元素<!ELEMENT …>…<!ATTLIST …>定义一个XML元素定义了一个属性<!ATTLIST …>…<!EMTITY…>定义一个实体…<!NOTATION…>定义一个符号...三 DTD对元素声明【重点】使用ELEMENT声明XML元素的语法, <!ELEMENT 元素名元素内容> 注:元素声明以“<!”开始,以“>”结束;元素声明指令“ELEMENT”为关键字,必须大写;元素名:为当前元素指定的元素名称;元素内容:元素名后面的内容用来指定元素的内容类型,可分为EMPTY(空)、子元素类型,混合型、ANY(任意)和#PCDATA 五种类型;DTD必须定义XML文档中允许出现的所有元素。
前面提到过的, DTD ( Document Type Definition ,文档类型定义)就是定义 XML 文档中元素的结构和内容等。
其实 DTD 就相当于 XML 中的“词汇”和“语法”,不同的行业可以定义自己的“词汇”和“语法”,以利于解析器验证 XML 文档的有效性,并且这样也利于行业中和行业之间的交流。
就相当于只有当两个人对各自说出的词汇都理解对方的时候才能有顺利的交流。
这其实就是对 XML 文档使用元素的定义的以层抽象,把它的定义独立出一个文件,以利于对信息的隐藏和扩展。
这也可以把它想象成程序语言,比如 C# 中的接口的定义。
把 DTD 文件想象成一个接口,而引用这个 DTD 文件的 XML 文档是这个接口的实现类,只要了解了这个 DTD 文件,就大致知道了和这个 DTD 文件相链接的 XML 文档的一些框架信息。
DTD 文件也可以看成是一系列 XML 文档的模板,它定义了相关 XML 文档的元素,属性,排列方式(元素,属性等),元素的内容类型,以及元素的层次结构等。
DTD 中元素的声明<;!ELEMENT 元素名(元素描述) >;这里主要介绍元素描述,元素的描述包含两部分:1. 如果元素是简单元素,即该元素不包含子元素,则描述部分是针对该元素的内容的限制或是规定。
这种限制的描述可以是:#PCDATA :元素的内容只能是可解析的文本数据。
<;!ELEMENT 元素名 (#PCDATA)>;EMPTY :元素内容必须为空,但可以包含属性。
<; ! ELEMENT 元素名 EMPTY>;2. 如果元素是复杂元素,即该元素包含子元素,则元素描述包含对子元素名的列表(可用正则表达式表达)。
元素描述的括号表示内容描述的组合。
<;!ELEMENT book(title, author+, summary | content)>;正则表达式用法:( ) 给元素分组(A | B | C), (D | E), F| 在列出的对象中选择一个 (A | B)* 对象允许出现 0 到多次 (A*)+ 对象应出现 1 到多次 (A+)对象可以出现 0 到 1 次 (A?), 对象以指定顺序出现(A, B, C)同时,如果不能确定一个元素是否含有子元素或是只能包含文本,那么可以将元素定义为混合类型的。
XML 混合引用DTD
如果XML文件同时带有内部DTD和外部DTD文件,那么XML解析器会将二者合一。
如果内部的DTD和外部的DTD文件同时声明了某个元素,那么将会导致错误。
如果不准备更改一个已经获得广泛支持的DTD文档,但是又需要增加新的内容时,可以同时使用内部DTD和外部DTD。
内部DTD可以方便地增加新内容,又不影响其他使用同一外部DTD的XML文档的有效性。
混合使用DTD的格式如下所示:
下面通过实例来说明如何使用混合DTD,首先创建一个外部DTD文件,内容
根元素的内容可以是任意内容,所以可以使用为根元素添加新的元素内容。
上述代码保存为dtdFile.xml文件。
引用该DTD的XML文件内容如下所示:
上述代码保存为dtds.xml文件,在内部DTD中新声明了一个名称为“描述”的元素。
在浏览器中打开该文件,如图3-5所示。
图3-5 混合使用DTD。
一、编写DTD:通用原则XML文档由元素和属性组成。
元素内容可通过其它元素或XML基本类型定义。
DTD是文档要关联的,文档中应用包含一条用于与DID建立关联的指令。
当XML解析器读取到该指令时,将获取DTD,并根据其中定义的规则对文档进行校验。
1、DOCTYPE标记:DOCTYPE声明用于将DTD与文档关联,应放在XML声明之后但在任何文档元素之前。
中间可插入注释和其它指令。
格式:A、外部声明:DOCTYPE 文档根元素可选的外部标识符外部标识符包括(指明外部DTD源的关键字和DTD文件位置)两种指明外部DTD源的关键字:a-1、SYSTEM: 解析器将根据其后的URL来定位DTD文件的位置。
<!DOCTYPE Catalog SYSTEM “http://myservers/decs/Pubcatalog.dtd”>a-2、PUBLIC: 用来声明公共的,众所周知的DTD,如一些标准组织定义的。
解析文档的应用程序可能会根据若干策略来定位DTD,如:从数据库中,或与应用程序相关的技术获得。
或应用程序有本地的拷贝。
Eg:<!DOCTYPE Catalog PUBLIC “universal/Publishing/Book”“/Publishing/Pubcatalog.dtd” >前面的URI为公共的URI,由处理文档的应用程序由某种策略获取DTD,若失败,从后面的URL获取DTD。
B、内部子集声明:DOCTYPE 文档根元素可选的标记声明块eg: <!DOCTYPE catalog […internal subset declarations here…]>注:可同时混合使用内部DTD和外部DTD,但两都出重复的声明时,内部的声明替换外部的声明。
2、DTD关键字:ELEMENT 元素类型声明A TTLIST 属性类型声明ENTITY 实体声明,该声明内容可重用NOTA TION 不需要处理的外部内容的格式声明,以及处理外部内容的应用程序2-1:实体:为避免将标记文本与实体名字混淆,引用实体时的格式为:&实体名字;预定义实体:对于一些不可打印字符,及用于XML标记的保留字符,XML提供了一些预定义的实体:< < > < & & …' “"通用实体:(不能包含对自身的引用)最简单的实体形式,它能够声明与某个名字相关联的可解析的文本块Eg:<!ENTITY copyright “zqw , inc, 2009 ”>引用:©right; 注----实体名字与定界符& ;间不能够有空格。