文档类型定义dtd的对象化模型

上传人:E**** 文档编号:118121864 上传时间:2019-12-11 格式:PDF 页数:4 大小:212.98KB
返回 下载 相关 举报
文档类型定义dtd的对象化模型_第1页
第1页 / 共4页
文档类型定义dtd的对象化模型_第2页
第2页 / 共4页
文档类型定义dtd的对象化模型_第3页
第3页 / 共4页
文档类型定义dtd的对象化模型_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《文档类型定义dtd的对象化模型》由会员分享,可在线阅读,更多相关《文档类型定义dtd的对象化模型(4页珍藏版)》请在金锄头文库上搜索。

1、计算机科学2 0 0 4 V 0 1 3 1 1 0 ( 增刊) 文档类型定义( D T D ) 的对象化模型 A n O b j e c tM o d e lf o rD 。c u m e n tT y P eD e i t i o n ( D T D ) L a “g u 8 9 e 慕容彗1 蔡月茹2 ( 清华大学软件学院北京1 0 0 0 8 4 ) 1( 清华大学计算机科学与技术系北京l o 0 0 8 4 ) z A b s t r a c tD o c u r n e n tT y p eD e f i n i t i o n ( D T D ) i so n ek i n do

2、 8 n g u 8 9 e sw h i c hd e 矗n et h es t r u c t u r eo fX M Ld o c u - f n e n t s T h i sp a p e ra n a l y s e sD T D 8c h a r 8 c t e n s t 记sa n di t 8a p p l i c a t i o n B a s e do nw h i c h u s h gJ A V Al a “g u 8 9 et od e s c r i b ea n dr e a l i z et w od i f f e r e n tk l n d 8o f0

3、 b j e c tM o d e l sf o rD T D 1 ta l s og i v e st h ec o r n p a r i s o n so ft h e ma n ds h o w s t h e i ra p p h c a t l o n s K e y w o r d s x M L ,D T D t0 b j e c tm o d e I 文档类型定义( D o c u m e n tT y p eD e f i n i t i o n ) 是 一种定义x M L 文档结构和语法的语言,包括定义 了x M L 文档的元素标记和内容类型、元素之间的 嵌套关系、以及元

4、素的属性等 3 。符合某一个D T D 定义的x M L 文档称之为有效的x M L 文档。实际 上,x M L 文档可以脱离D T D 单独存在,但是缺少 D T D 的x M L 文档在数据的语义表达方面功能减 弱,以及在文档的结构约束方面失去了保障,同时也 不利于对x M L 文档的解析以及数据的获取。目前 在x M L 文档的结构定义语言还包括s c h e m a 语言。 它还可以定义例如浮点数、布尔类型等多种数据类 型,同时s c h e m a 文档本身的格式符合x M L 的规 范,因此可以通过x M L 解析器进行解析。而实际上 和多数x M L 结构定义语言一样H ,S c

5、 h e m a 语言也 是通过D T D 语言来定义元数据格式,因此D T D 称 得上是其它X M L 结构定义语言的基础。 1 对象化的意义 统一数据平台是目前各个行业都在努力达到的 目标o ,因为数据的不一致会导致相互之间的数据 的交换造成很大的浪费。以电子商务领域为例如果 各个企业之间的数据在结构定义上,在语义上都有 区别,那么任何两个有业务联系的企业在获取对方 的数据的同时,需要通过某个具体的转换代码来实 现对接收的数据进行结构上以及语义上的转换。假 设有m 个企业互相之间有业务往来,而相互传递的 数据格式各不相同,对于任意一个企业,都需要有 ( m 一1 ) 个转换器来处理接收到

6、的不同企业的数据, 这对于规模较大的企业是一个不小的负担,而产生 这种情况的原因,是因为数据平台的不统一造成的。 正因为统一数据平台在各个行业的简化数据交换方 面发挥着重要的作用,因此自x M L 规范推出以来, 各个行业都采用定义公用D T D 的方式纷纷推出了 行业数据交换标准,各个实体在定义数据交换格式 4 7 4 - 的时候,或者使用公用D T D 对象或者定义公用 D T D 对象的子集这样相互传递的数据就有类似的 结构和统一的语义对于各行业的电子化都有很深 远的意义。 1 D T D 的作用不仅仅体现在验证x M L 文档 的有效性方面,同时它可以指导x M L 文档的生成。 我们

7、知道D T D 定义了x M L 文档的元素、属性以 及元素之间的嵌套关系。每一个x M L 元素的内容 类型、属性以及子元素的出现规则都必须遵循对应 D T D 的定义。因此,我们可以通过解析D T D 获得 x M L 文档的元数据信息,为系统自动生成符合特 定D T D 的x M L 文档提供结构化的约束; 2 D T D 保存了一类x M L 文档的结构信息这 些信息对于分析X M L 文档以及从X M L 文档抽取 信息都是必不可少的。x M L 文档的查询语言x P a t h 把x M L 文档看作一个路径树模型,通过节点路径 来获取x M L 文档树节点的数据。对于一个要获取

8、X M L 文档信息的应用系统来说,在采用x P a t h 来 获取x M L 文档信息的时候,首先要了解x M L 文档 结构的准确定义才能够获得x p a t h 路径的通用表 示格式,而实现D T D 对象化能够提供x M L 文档结 构的准确定义; 3 在x M L 文档转换方面,主要依靠D T D 来决 定文档元素之问的对应关系。目前x s L T ( e x t e n s i b l es t y l eL a n g u a g eT r a n s f o r m a t i o n ) 是用于任意 x M L 文档之间进行相互转换的语言。任意的两个 x M L 文档要实现

9、相互之间的转换,必须首先了解 两个x M L 文档之间的结构上的差异以及从语义上 确定元素以及属性的转换规则( 这个规则的实现一 般需要手工干预) ,那么我们只有把D T D 对象化并 从中获得x M L 文档的结构,才有可能通过x s L T 实现任意两个x M L 文档的相互转换。 所以,D T D 的对象化能够更好地实现x M L 文 档的动态生成,x M L 文档的信息提取以及x M L 文 档的相互转换。 2 对象化的模型的提出 D T D 语言的对象化模型,就是要解析D T D 文 档,在内存中生成一个或多个对象来保存D T D 文 档的信息。从而为其它系统获取D T D 文档信息

10、提 供程序接口。D T D 语言在建模过程中有下面几个因 素需要考虑: 元素的嵌套关系。我们在分析D T D 语言的特 点的时候提到D T D 语言元素之间可以通过内容模 型任意的嵌套,这里同一个元素可能作为多个其它 元素的子元素存在并且可能出现的次数不一致,那 么在D T D 文档对象化的过程中需要考虑到如何通 过对象来表示元索的定义以及该元素作为子元素的 不同出现次数。 属性对象的处理。属性对象在D o M 接口中是 作为元素对象的成员变量保存的 ”,在整个D o M 树的遍历过程中并不能得到属性对象,而只有获得 一个元素对象后,通过这个元素对象的存取方法来 操作属性对象。实际上,一个元素

11、的属性与该元素的 内容模型为# P c D A T A 的子元素相比,除了在文档 中位置不一致外,在数据表示上是完全一致的。我们 可以把一些属性定义为子元素,也可以把一些子元 素定义为属性。在定义D T D 时把一些数据表示定 义为属性是为了减少x M L 文档的深度,而实际上 把属性看成子元素对待,能够使元素的处理与属性 的处理达成一致,使程序代码简洁且易维护。 针对D T D 语言的特点以及笔者在软件开发中 的经验,这里给出两种D T D 文档的对象化模型,一 种是D T D 文档的完整树模型,一种是D T D 文档的 元素列表模型。 2 1D T D 文档的完整树模型 D T D 文档的

12、完整树模型类似于x M L 文档的 D O M 树模型,但有所不同口 。它把文档中各种要素 看成逻辑节点,根据要素之间的包含关系构成一个 有层次结构的逻辑树。目前我们主要关心的是D T D 文档中的元素和属性。因此对于D T D 文档而言,这 里的要素指的是在D T D 文档中定义的元素和属 性。正如D T D 文档中所描述的那样,D T D 的元素通 过内容模型嵌套,那么如果我们把每一个元素看成 是一个元素节点,那么从D T D 定义的根元素开始 按照元素节点之间的嵌套关系组织元素节点,就得 到了一棵以D T D 文档根元素为根节点的D T D 文 档树( 如图1 所示) 。 在D T D

13、文档中,一个元素只被定义一次,但是 可以作为子元素出现在其它元素定义的内容模型 中,并且可能出现的次数不致。因此在这个对象模 型中定义了一个M e t a E l e m e n t 对象,用于存放元素 自身信息,它的成员变量包括元素名、元素类型、内 容模型等。属性在D T D 完整树中作为一个元素节 点,它的父节点是该属性所属的元素节点,它自身定 义的信息存放在M e t a A t t r i b u t e 对象中这个对象 的成员变量包括属性名,属性类型,属性值类型,属 性值列表以及属性缺省值。M e t a E l e m e n t 与 M e t a A t t r i b u t

14、 e 作为元数据对象,有共同的父类抽象 对象M e t a c o n t e n t 。在这个模型中定义了D T D N o d e 对象的子类D T D E l e m e n t 对象,用于表示在D T D 完整树中的元素节点,这个对象的成员变量包括一 个M e t a C o n t e n t 对象的实例。 圃嚏M 唧A 霹,c p 旧【同衄订B ,B 黔 回啦M E m c t q 邱, 雌L 珊t E N T E 伍驴 p ,口撇g 埘却f ,聊戚酗晰n “ 图1D r r D 完整树的简化例子 我们通过定义逻辑节点来表示D T D 完整树中 元素之间的逻辑关系,定义D T D

15、N o d e 的子类D T 口 L o g i c 作为D T D 完整树上的虚拟节点来表示元素 之间的逻辑关系,根据D T D L o g i c 节点的成员变量 t y p e 的不同取值来区别元素之间不同的逻辑关系。 对象之间的类图如图2 所示。 图2D T D 完整树的类图 由此,找们可以得到如图3 所示的D H ) 完整树 4 7 5 模型的完整例子。 皿麟盯 伸C e 嗵T 玛T - I 聃僦o I 加啦D ) 皿瑚B ( D F p 旺肿订Cr 盛且净 D 四烈e 蜘 图3D T D 完整树的完整例子 由于D T D 语言没有对元素的嵌套层次进行任 何的限制,同时由于逻辑节点的

16、加入,使D T D 完整 树的层次会随着D T D 文档的元素美系的复杂化而 迅速加大,此时在D T D 完整树上对元素节点的搜 索与定位变得异常重要,一种比较好的解决办法是 记录每个元素节点在父节点中的索引值,同时建立 元素节点的索引表,每次我们根据索引表来定位元 素节点,降低在D T D 完整树上查找某个元素节点 的开销。 D T D 语言允许元素的递归定义,比如下面这个 例子t ( ! E L E M E N TA ( B ) ) I E L E M E N TB ( A ) ) 图4 控制无限树的递归深度 如果不对元素的这种递归定义进行特殊处理, 那么D T D 完整树就将变成一棵无限树并且最终导 致系统的内存泄漏。那么对于元素的递归定义。一种 4 7 6 比较有效的处理方式是由系统或用户指定统一元素 的递归深度,如图4 所示。 系统指定同一元素的递归深度为3 ,那么在构造 D T D 完整树时候,在添加一个元素节点之前就需要 比

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号