




已阅读5页,还剩60页未读, 继续免费阅读
(计算机软件与理论专业论文)基于模板的代码自动生成系统的研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沈阳理工大学硕士学位论文 摘 要 随着社会的不断发展,web 管理信息系统的需求与日俱增。采用传统的手工 编码方式开发 web 管理信息系统时,经常会出现大量的重复编码工作,而长时间 的重复性劳动降低了软件开发人员的工作效率和热情。为了解决 web 管理信息系 统的快速开发,本文设计了一个基于模板的代码自动生成系统。该模板是根据客 户的需求,并通过 dreamweaver 制作出一定规则的界面模板。通过解析用户界面 模板和提取数据库表详细信息,生成一个 castle activerecord 架构的 web 管理信 息系统应用程序,能够实现对数据库表进行增加、查询、修改、删除等操作。 为实现本系统,主要研究了 html 控件和 aspx 控件之间的异同、如何解析 html 文件为 aspx 文件、对象关系映射技术、数据库连接技术、如何提取数据库表的详 细信息及 xml dom 解析技术。 通过一个应用案例测试,证明本系统能够使 castle activerecord 架构 web 管 理信息系统的开发更方便和更快捷,能够有效地提高开发人员的工作效率;不仅 把开发人员从单调的代码编写中解放出来,而且能够更快捷开发出易于维护的管 理信息系统。 关键词:模板,代码自动生成,web 管理信息系统,castle activerecord 架构 沈阳理工大学硕士学位论文 abstract with the development of society the demand of web management information systems is increasing. using the traditional hand-coding often appear a large number of duplication of code work, under long hours of working repeated can reduces the efficiency and enthusiasm. in order to solve the problem that the rapid development of web information management system and improving the efficiency, this thesis designs an automatic code generation system base on template. the regular template is creat through dreamweaver based on customer demand. by parsing the user interface templates and extract the detail information of database tables, generate a web management information system applications of castle activerecord framework , can be achieved the function of creating, reading, updateing, deleteing to operate the table. to achieve this system, mainly studies the html control and the similarities and differences between the aspx controls, how to parse html file to aspx file, the technology of object relational mapping, the technology of database connection, how to extract more information on database tables and xml dom parsing techniques. it is proved that this system can develop the management information system of castle activerecord framework easily and quickly, can raise the efficiency and can make the developers and maintainers work freely to meet customer needs. keywords: template, automatic code generation, web management information system, castle activerecord framework 沈阳理工大学硕士学位论文 沈阳理工大学 硕士学位论文原创性声明 本人郑重声明:本论文的所有工作,是在导师的指导下,由作者本 人独立完成的。有关观点、方法、数据和文献的引用已在文中指出, 并与参考文献相对应。除文中已注明引用的内容外,本论文不包含任 何其他个人或集体已经公开发表的作品成果。对本文的研究做出重要 贡献的个人和集体,均己在文中以明确方式标明。本人完全意识到本 声明的法律结果由本人承担。 作者(签字) : 日 期 : 年 月 日 学位论文版权使用授权书 本学位论文作者完全了解沈阳理工大学有关保留、使用学位论文 的规定,即:沈阳理工大学有权保留并向国家有关部门或机构送交学 位论文的复印件和磁盘,允许论文被查阅和借阅。本人授权沈阳理工 大学可以将学位论文的全部或部分内容编入有关数据库进行检索,可 以采用影印、缩印或其它复制手段保存、汇编学位论文。 (保密的学位论文在解密后适用本授权书) 学位论文作者签名: 指导教师签名: 日 期: 日 期: 第 1 章 绪论 - 1 - 第 1 章 绪论 1.1 课题的研究背景和意义 随着现代化信息环境日趋复杂,各种应用软件的开发难度随之加大。传统的 软件开发方式效率低、开发周期长、存在大量的重复编码工作,由于时间上的压 力,开发人员只注重代码编写速度,却忽视了程序的实用性和维护性,加上个人 的编码风格迥异,很容易造成后期测试难和维护难的问题。如何提高开发效率、 降低开发成本和增强企业竞争力成为了软件企业关心的问题。 在实际的开发项目过程中,发现企事业单位和政府对 web 管理信息系统的需 求越来越多,虽然不同企业和政府部门的具体需求不同,但是管理信息系统功能 有很多的相似之处。一个管理信息系统最基本的功能就是对数据库的管理,实现 对数据的增加、查询、修改和删除(create、read、update、delete,简称 crud) 等操作功能,对于不同的客户往往最大的不同就是对界面风格的需求不同。如果 一个系统相似功能模块越多,那么就意味着重复代码也越多,也就说如果成功开 发过一个管理信息系统,当再次开发相似的系统时,虽然能够驾轻就熟,但是仍 然需要软件开发人员进行大量的手工编码。如果能够重用原有的设计和代码,势 必会减轻开发人员的负担,以及对整个项目都是有益的。根据以往的开发经验总 结常用的开发模块,设计一个能够生成大部分程序代码的自动生成系统,对于软 件开发人员来说,将会大大提高开发效率,使他们从枯燥的编码中解脱出来,从 而有更多的精力去研究复杂的业务;对于企业来说,缩短了开发周期,提高软件 产品的设计质量 1,从而为企业节约了大量的开发成本,以及后期的维护费用。 1.2 国内外研究现状 代码自动生成技术从上世纪开始起步发展以来,取得了很大的进步,与之相 关的研究也取得了丰硕的成果,促进了软件开发技术的飞速发展。但随着计算机 科学与技术的不断发展,代码自动生成技术也需要更进一步的发展,以适应软件 开发的实际需要。 沈阳理工大学硕士学位论文 - 2 - 目前国外很多大型的软件公司为了解决代码重用的问题,都有着自己的解决 方案。一些解决方案是通过用户创建的模型文件生成代码,例如 rational 公司的 rose 就能够根据用户通过其创建的数据模型,按照用户选择的语言类别,自动化 生成一些代码。together 公司的 together center,同样是通过用户设计的 uml 文 件来自动生成一些目标代码 2。另外的一些解决方案是在集成开发环境中增加一些 向导功能,利用向导可以自动生成部分所需的目标代码。例如 microsoft 公司的 visual studio 系列均采用向导的方式,当需要创建相关控件或类时,开发人员只 需要将控件拖到开发环境并添加用户控件名,即能生成固定格式的控件框架代码; 需要类时,在开发环境里添加类,并填写相应的类名,就能生成固定的类框架代 码。borland 公司的 jbuilder 也是目前比较流行的开发工具,提供可视化的操作开 发界面,也是通过向导的方式自动生成框架代码。 在国内也有些企业开发了自主产权的代码自动生成系统,如金蝶公司等都有 开发过代码自动生成系统。然而由于种种原因,国内的软件公司对代码自动生成 的研究比较少。 代码自动生成系统之所以受到软件行业的青睐,是因为它是对原始编程方式 方法的一种变革,这种变革势从某种程度上来说也是对传统方式的一种继承,同 时也可能摒弃旧的编程方法,会不断的发现问题以及发现解决新问题的方法来适 应软件技术的发展 3。代码自动生成系统作为软件开发的辅助工具,在软件行业已 经得到了广泛的使用,是因为它具有以下优点: 第一, 对于一个软件企业来说, 使用代码自动生成能够大大节约了人力资本, 缩短开始周期,同时也提高了项目的质量。 第二,对于软件开发人员来说,改变了以前的工作方式,不会因为客户的需 求发生变化,再次进行大规模的修改,只需要修改代码自动生成系统,重新生成 源代码即可。同时也使得软件开发人员从枯燥的手工编码和重复性劳动中解脱出 来,提高了工作效率。 第三,自动生成的代码具有非常规范书写格式,它可以为程序员提供一个可 供参考的开发样例和良好的代码风格。自动生成的代码同时也具有较好的可维护 性和可升级性 4。 然而任何事物都不是完美的,所以代码自动生成系统也有它的不足之处。一 第 1 章 绪论 - 3 - 般生成的代码相对比较单一,以及生成的系统界面风格相对固定,往往很难满足 客户的需求。 1.3 本文主要研究内容和论文组织结构 1.3.1 主要研究内容 代码自动生成系统主要的作用是能够生成大量可用的目标代码,在这一过程 中如何能够最大程度生成满意的代码是需要重点考虑的问题。本文所研究的代码 自动生成系统是一个能够生成具有 castle activerecord 框架的 web 管理信息系统 应用程序,并且能够根据 html 界面模板生成用户界面。本文的主要研究内容如下: (1) 设计html界面模板和一个解析算法 对于如何解析 html 为 aspx,区别 html 和 aspx 之间的异同是关键,本文研究 了两者之间异同,定义了制作 html 界面模板的规则,并设计和实现了一个界面模 板解析算法。 (2) 对象关系映射技术 本系统生成的 castle activerecord 框架 web 应用程序,而它是一个基于.net 的对象关系映射框架,本文对对象关系映射技术进行了研究。 (3) 数据库连接技术ado.net 本代码生成系统是以 sql server 作为数据源的,且在.net 平台下开发的, 深入研究了该环境下的数据库连接技术ado.net。 (4) xml和dom技术 在保存数据库连接字符串时,本文以 xml 来存储数据,对如何设计 xml 文 档、及操作 xml 文档的 dom 技术进行了一定的研究。 (5) 如何提取数据库信息 生成的 web 应用程序中操作数据库代码和实体类是通过提取数据表字段信息 生成的,对于如何获得数据库、如何提取数据库表的信息进行了研究。 1.3.2 论文组织结构 本文共分五章。 第一章是绪论。概述了课题的研究背景和本文的研究意义,研究了国内外的 现状,并介绍了本文的主要研究内容。 第二章是相关理论及技术的研究。本章主要介绍了代码自动生成系统的基本 沈阳理工大学硕士学位论文 - 4 - 概念、代码自动生成系统的分类和相关特性,最后介绍了实现代码自动生成系统 采用的关键技术。 第三章是代码自动生成系统的分析和设计。本章主要介绍了目标代码需求和 代码自动生成系统的需求,以及代码自动生成系统的概要设计和详细设计。 第四章是代码自动生成系统的实现和测试。本章主要介绍了代码自动生成系 统各个模块的具体实现,以及该系统的测试验证。 最后是本文的结论。 第 2 章 相关理论及技术的研究 - 5 - 第 2 章 相关理论及技术的研究 2.1 代码自动生成系统的概念 代码自动生成是一种利用计算机程序产生某种程序代码的技术,这类计算机 程序即为代码自动生成器,或称代码自动生成系统 5, 它是按照设定的模式,遵照 一定的规则,生成规范的、且计算机能理解的代码的过程 6。代码自动生成系统的 共同的特点就是输出的都是代码,这些代码可以通过手工编写来完成,而输入的 源文件可能不同。代码自动生成系统目的就是减少重复劳动、提高软件的质量、 提高软件开发的效率。代码自动生成技术的基本功能是读取元数据,例如数据库 模型、相关设计文档等,然后根据一定的模式和规则生成相应的源代码。代码自 动生成系统的基本模型 7,如图 2.1 所示: 模板/模式 域规则域元数据 代码自动生成 图 2.1 代码自动生成系统基本模型 由图2.1可以看出代码自动生成系统模型包括三部分:模板/模式、域元数据 和域规则。模板/模式是代码自动生成中的不变关系或模式;域元数据是指描述数 据的数据,将在生成代码中模型化的元数据;域规则是用来以约束域数据结构和 行为的,它通常被代码自动生成引擎所封装 8。 代码自动生成作为二次开发的方法,而不仅仅是一种工具,特别是在开发的 早期阶段,确定数据库有关文件。通过编写特定的代码,在应用系统生成的可用 的代码的某些部分,其中的源代码和目标代码可以不使用相同的语言。 许多学者认为代码自动生成是一种反模式的观念,他们认为所谓的代码自动 生成,实质上是一种代码复制和粘贴变相的编程方式,只不过是由机器代替手工 沈阳理工大学硕士学位论文 - 6 - 进行复制和拷贝。从某种角度上来看,与普通手工复制和粘贴很相似,但是与其 相比代码自动生成系统有很大的益处。如果手工复制的程序代码发生错误时,那 么很可能会出现大规模的修改程序段,在这种情况下,如果引入了代码自动生成 技术,将代码按照某种规则的结合起来,当客户的需求发生变化时,只需要将代 码自动生成系统某部分进行修改即可,没有必要进行大规模的修改,既保证了代 码的质量,也提高了工作效率。 在软件开发过程中,可根据实际需求,用户通过设置表单的属性,定制与数 据库相关联,且能够符合要求的文档,这样使得可复用代码不再通过软件开发人 员编写,而直接将代码自动生成出来,以此来节约软件开发人员的时间和精力。 2.2 代码自动生成系统的分类 目前的代码自动生成系统按照代码自动生成技术的分类方式有多种,这里以 输入输出的形式来区分,可以分为五种。 (1) 局部代码自动生成系统 局部代码自动生成系统通过读取一个自定义文件,并和一个或多个模板文档 产生一个或多个基本类。局部代码自动生成系统使用模板建立用于输出的基础类 库。这些局部类和开发人员手工建立的类代码一起组成完整的类,然后进行编译, 最后生成可执行的代码。定义文档里包含产生类所需要的所有信息,将这些信息 与所要产生类的模板文档结合起来产生该类原始代码,配合其它的类一同组成整 个系统 9。 (2) 混合代码自动生成系统 混合代码自动生成系统是以代码文件作为输入文件和输出文件,而且它们都 是一种相同的高级程序语言的源代码。混合代码自动生成系统最大的特点就是一 次产生的代码可以作为下一次的输入源代码文件,产生新的目标代码,该类代码 自动生成系统可用于写在代码注释里的测试用例数据产生测试代码、写在代码注 释里的存取定义产生数据库存取代码等等 10。混合代码自动生成系统的工作流程 是:读取源代码文件,然后由系统修改并且替换生成相应的目标代码文件。 (3) 层代码自动生成系统 层代码生成系统可以从一个抽象的设计为一个系统创建完整的层代码,生成 的代码不需做任何的变动和修改,即可完成该层的功能需求。这里的层是指多层 第 2 章 相关理论及技术的研究 - 7 - 应用程序的表示层、业务逻辑层和数据访问层。这种形式的代码自动生成系统目 前在商业上运用的最广泛。 层代码自动生成系统它的输入文件是一个自定义文件和模板文件,自定义文 件通常是指 xml 文件,能够生成一个应用程序的一层或者多层代码。该类系统与 (1)中系统相比较,有相似之处。输入文件都是自定义文件和模板文件,而不同的 是层代码自动生成系统的自定义输入文件里包含了一个或者多个层应用程序的类 和函数,能够生成一个或多层所有的代码,来实现该层的功能,而(1)中系统中只 生成基类。 (4) 整合式代码自动生成系统 整合式代码自动生成系统读入代码作为输入,然后创建新的代码作为输出, 这些生成的代码可以部分的或者完全的依赖于生成系统的设计。整合式代码自动 生成系统的工作流程是:输入给定的源代码,系统从中找出重要的特征并输出一 个或多个不同类型的文档。整合式代码自动生成系统输入的源码文档,很可能是 使用正则表达式或一些简单的编码解析,然后以内置的或外部提供的模板生成输 出文档。相关的例子有,这种代码自动生成系统可用在许多方面,比如生成文档, 从文档中读取常量或函数样本。相关的例子有,javadoc 11,xdoclet12。 (5) 内嵌代码自动扩展生成系统 内嵌代码自动扩展生成系统以源代码作为输入,作为基础生成目标代码。内 嵌代码自动扩展生成系统的工作流程是:输入源代码,并生成目标代码。输入源 代码中有特殊的标记,当输出目标代码时,用指定的代码来取代这些标记。内嵌 代码自动扩展生成系统通常将 sql 代码嵌入源码文档,开发人员以可以区别的标 记来注释 sql 代码。内嵌代码自动扩展生成系统读取代码,然后在其发现这些注 解的地方,插入实现 sql 命令的代码。相关的例子有,embedded sql in c, embedded sql 是将数据库语言 sql 嵌入到一个过程式语言。 2.3 代码自动生成的特性 设计开发一个代码自动生成系统,要使其具有一定的实用性,生成的代码必 须具有这几个特点: (1) 完整性 生成的代码不能仅仅是一个框架代码,生成的代码必须能够完成某种具体的 沈阳理工大学硕士学位论文 - 8 - 业务功能。也就是说它是一套完整的目标代码,能够直接运行的。这样就使得生 成的代码上升到应用的层次。 (2) 可扩展性 生成的代码必须是可扩展的,且是高质量的。生成的代码和框架必须是目前 主流的,否则即使能够运行起来完成某种业务,一旦系统需要升级和维护,开发 人员可以很快的读懂生成的代码,可以随时对系统进行扩展和维护。 (3) 开放性 对于自动生成不适合或不喜欢的部分,可以替换和优化,系统在技术组件和 技术设计模式层次是必须完全开放的,以便工程人员充分发挥其创造性 13。 (4) 一致性 产生的代码在不同模块里的类名、函数名和变量名要完全一致。 2.4 代码自动生成系统的相关技术 2.4.1 .net .net framework .net framework 是微软为开发应用程序,并管理其运行时执行而创建的一个 新平台。它支持如:c#、vb.net、c+等这些语言,在.net framework 可以创 建 windows 应用程序、web 应用程序、web 服务和其他各种类型的应用程序。 .net framework 由两个主要组成部分,分别是通用语言运行时(common language runtime,简称 clr)和.net 框架类库(.net framework class library, 简称 fcl) 14。.net 的框架结构如图 2.2 所示。 任何以.net 语言编写的应用程序都可以使用.net 框架类库的代码,在这个 类库中提供的技术中,最重要的包括如下: asp.net:专门用于构建 web 应用程序; windows form:用于以任何 clr 的编程语言构建 windows 图形用户界面 (graphical user interfaces,简称 gui) ; asp.net web services:用于创建 web service 与其他应用程序进行通 讯的应用程序; enterprise service:提供分布式事务对象实例控制,以及其他用以构建可 靠地、可伸缩的应用程序的服务; 第 2 章 相关理论及技术的研究 - 9 - ado.net:访问存储在关系型数据库管理系统中的数据 15。 应用程序应用程序 asp.net windows forms asp.net web service enterprise services ado.net更多 .net framenwork class library (.net 框架类库).net framenwork class library (.net 框架类库) common language runtime (通用语言运行时 )common language runtime (通用语言运行时 ) windows 操作系统 图 2.2 .net 框架 clr 是所有.net 应用程序运行时环境,是所有.net 应用程序都使用的编程 基础, 它包含两个组成部分, 分别是公共语言规范 (common language specification, 简称cls)和通用类型系统(common type system,简称 cts) 16。clr 的基本 原则是管理代码,并提供一些核心服务,如编译、内存管理、线程管理、代码执 行、强制实施类型安全以及代码安全性验证。编译器以定义应用程序开发人员可 用的基本数据类型的公共语言运行时为目标。由于公共语言运行时提供代码执行 的托管环境,它提高了开发人员的工作效率并有利于开发可靠的应用程序。 cls 一种确定公共语言运行库如何定义、使用和管理类型的规范,制定了一 种以.net 平台为目标的语言所必须支持的最小特征,以及该语言与其他.net 语 言之间实现互操作性所需要的完备特征,所以在实际开发中,开发人员就可以专 注于使用自己选择的语言开发应用程序并可以充分利用其他开发人员用其他语言 编写的运行时、类库和组件,因此提高了开发人员的工作效率。 cts 用于解决不同语言的数据类型不同的问题,如 c#中的整型是 int,而 vb.net 中是 integer,通过 cts 把它们两个编译成通用的类型 int32,所以.net 语言共享这一类型系统,在它们之间实现无缝互操作。 ado.net ado.net 起源于活动数据对象(active data objects,简称 ado) ,是一组用 于和数据源进行交互的面向对象类库,它主要用于访问数据,解决了应用程序和数 据库之间不能分离的问题,可以任意的对数据源进行 crud 等操作。一般情况下, 沈阳理工大学硕士学位论文 - 10 - 数据源是数据库,它允许和不同类型的数据源以及数据库进行交互,这些数据源 都可以过.net 的 ado.net 类库来进行连接。不同的数据源采用不同的协议,所 以对于不同的数据源必须采用相应的协议。一些老式的数据源使用开放数据库互 连协议(open database connectivity,简称 odbc),许多新的数据源使用对象链接 和嵌入数据库协议(object linking and embedding database,简称 oledb),并且目 前还在不断出现更多的数据源,这些数据源可以通过 ado.net 类库来进行连接。 ado.net 对象模型的两个核心组件:dataset 和.net 数据提供者 17。通过这 两个核心组件,可以实现数据访问和数据操作的分离。 dataset 是 ado.net 的重要组成部分, 是 ado.net 与 odbc 和 oledb 访 问方式的本质区别。dataset 允许从数据库查找的数据存放到内存中,从而解决了 两个重要问题: 编程模型与数据源独立; ado.net 支持离线访问数据源 18。 dataset 对象是数据在内存中的表示形式,它的结构类似与关系数据库,它的组成部分有 表的对象 datatable 和表的之间的关系 datarelation, 它包含任意数量的 datatable, 且每个 datatable 又包含 datacolumn(表的一列)和 datarow(表的一行) 。 ado.net结构的另一个核心元素是.net数据提供者,它分为三类:sql server数据提供者、oledb数据提供者和odbc数据提供者。.net数据提供者的 对象包括connection、command、datareader和dataadapter。在.net数据提供者 中定义对象,前面必须加上前缀,如在sql server数据提供者中定义的话,对象 的前面则加上sql前缀。在oledb数据提供者和odbc数据提供者中定义,对象的 前面则加上前缀oledb和odbc。.net数据提供者的对象具体内容是: (1) connection对象 connection 对象的主要作用就是负责与数据库连接,帮助指明数据库服务器、 数据库名字、用户名、密码,和连接数据库所需要的其它参数。connection 对象会 被 command 对象使用,这样就能够知道是在哪个数据库上面执行命令。 (2) command 对象 command 对象又叫命令对象,定义了对数据源执行的指定命令,主要是执行 sql 命令,例如:select、insert、update、delete 等,使用 command 对象来发送 sql 语句给数据库。它的 connection 属性指出了那种连接对象。也可以使用 command 对象来直接执行命令,它一般与 dataadapter 结合使用。 第 2 章 相关理论及技术的研究 - 11 - (3) datareader对象 datareader 对象可以看做是一个简单的数据集。其主要用于从数据源查询只 读类型的数据,通常它是用在海量数据查询中。datareader 对象常用的方法是 read、close 和 get 方法, read 方法常用来遍历整个数据结果。考虑性能的因素, 从 datareader 返回的数据都是快速的且只是“向前”的数据流。这意味着只能按 照一定的顺序从数据流中取出数据。 (4) dataadapter对象 在 ado.net 里, 数据从目标数据库的获取与更新都是通过 dataadapter 对象 来实现的,它在物理数据库表和内存数据表之间起着桥梁的作用。dataadapter 对 象用于从数据源中获取数据,填充 dataset 中的表和约束,并将对 dataset 的更改 提交给数据源。dataadapter 对象有 4 个重要属性,即 selectcommand、 insertcommand、updatecommand 和 deletecommand,这四个属性都是 command 对象。dataadapter 对象包含对连接对象以及当对数据库进行读取或者写入的时候 自动的打开或者关闭连接的引用。 .net 的开发模式 (1) 客户机/服务器开发模式 客户机/服务器(client/server,简称 c/s)开发模式,是 20 世纪 80 年代末 逐步成长起来的一种软件开发模式,是软件系统体系结构的一种。客户端应用 程序是传统风格的应用程序,是基于 windows 编程的。c/s 结构的关键在于功能 的分布,一些功能放在客户端上执行,另一些功能放在服务器上执行。功能的 分布在于减少计算机系统的各种瓶颈问题。c/s 模式简单地讲就是基于企业内 部网络的应用系统。c/s 模式的应用系统最大的好处是不依赖企业外网环境, 即无论企业是否能够上网,都不影响应用。本系统采用的是 c/s 模式进行开发 的。 (2) 浏览器/服务器开发模式 浏览器/服务器(browser/server,简称b/s)开发模式又称b/s结构。它是随 着internet技术的兴起,对c/s模式的一种变化或者改进的结构。在这种结构下, 用户工作界面是通过浏览器来实现,b/s模式最大的好处是运行维护比较简便, 能实现不同的人员, 从不同的地点, 以不同的接入方式访问和操作共同的数据; 沈阳理工大学硕士学位论文 - 12 - 最大的缺点是对企业外网环境依赖性太强, 由于各种原因引起企业外网中断都 会造成系统瘫痪。 2.4.2 可扩展标记语言 可扩展标记语言(extensible markup language,简称 xml)是一个用于创建 自定义标记语言,它允许用户定义标记的各个部分,它是从标准通用标记语言 (standard generalized markup language,简称 sgml)发展而来的。它是由国际 标准化组织的万维网联盟(world wide web consortium,简称 w3c)于 1998 年 2 月推出。简单地说,xml 是一组规则和准则的集合,用于以无格式文本(而不是专 用二进制表达)来描述结构化数据 19。xml 是一种中介标记语言(meta-markup language)可以用来描述结构化文档的格式的,将数据和对元数据结合在一起, 因而比关系模型更具有灵活的描述能力,既能表示结构化得文档,也能表示半结 构化文档。 xml 是 internet 环境中跨平台的,依赖于内容的技术它是一种非常简单的数 据存储语言,使用一系列简单的标记描述数据,是以一种简单、标准、并可扩充 的方式,将各种信息如文本、表格,甚至图形等以原始数据的方式储存 20。而这些 标记可以用很简便的方式创建, 尽管 xml 在系统中占用的内存比二进制数据要多 很多,但是由于它的特点使得 xml 变得简单且以掌握。 xml 是一种表示结构化文档信息标准的文本格式,它没有复杂的语法和数据 定义。xml 的特性如下所示: (1) 可扩展性 xml 允许用户根据自己的需要创建和使用自己的标记符号,这些标记可通过 xml 文档类型声明(document type definition,简称 dtd)加以定义,并不像 html 那样只有有限固定的标记。 (2) 灵活性 xml提供了一种结构化的数据表示方式,使得用户界面分离于结构化数据。 所以,web 用户所追求的许多先进功能在xml环境下更容易实现 21。 (3) 自描述性 xml 文档通常包含一个 dtd,因而 xml 文档是自描述的。 xml可以用来保存数据,但是xml本身并不是数据库,xml只意味着xml 第 2 章 相关理论及技术的研究 - 13 - 文档,只有当xml被用于数据存储时,xml以及与之相关的技术结合就组成一个 数据库管理系统 22。xml虽然不及数据库的强大功能,但是xml有其自己独特的 优点:在保持少量数据时,xml有很强的优势,因为只是文件读写,数据量少意 味着处理数据的时间少,几乎只剩下打开文件的时间;而数据库要建立连接,再 读从数据库中读写数据,在处理小型数据时反而效率低。不过对于海量数据,则 体现了数据库的优势,xml几乎无法完成。 2.4.3 文档对象模型 文档对象模型(document object model 23,简称dom) ,是一种独立于语言和 平台的w3c标准,是对xml文档进行应用开发、编程的应用程序接口。dom提供 了在不同环境和应用中的标准接口,可以用任何语言实现。dom采用对象模型和 一系列的接口来描述xml文档的内容和结构,即利用对象把文档模型化。dom是 以层次结构组织的节点或信息片断的集合,开发人员可以在这个树中寻找特定信 息。由于它是基于信息层次的,因而dom是被认为基于对象的或基于树的。xml 文档具有一个称为节点的信息单元层次结构,而dom是描述xml文档节点和节点 间关系的方式。事实上dom就是采用树状的对象集合方式来访问给定文档内容的 抽象规范。当对xml文档进行操作时,dom首先对xml文档进行解析,将xml 文档分解为单独的元素、属性和注释。然后通过dom对每个节点进行相关的操作。 dom把xml文档转化为一个树,并且该树中包含了xml文档的内容,可以遍 历树中的每一个节点,处理xml方式是以树为基础的,以树为基础的应用程序接 口把xml文档转换成一个定制的树状结构,所有后续操作都是在这个“树化”后 的xml文件上执行,如增加或删除元素 24。用dom解析xml文档模型的优点是容 易编程,开发人员只需要调用操作dom树的指令,就可以很容易对树中的节点原 属进行添加、修改等操作。dom的基本对象有5个:document,node,nodelist, element和attr对象。利用dom中的对象,开发人员可以对文档进行读取、搜索、 修改、添加和删除等操作,为文档导航以及操作xml的内容和结构提供了标准的 函数。下面对每个对象得含义和提供的方法进行分析。 document 对象代表了 xml dom 树的根节点,同时代表了整个 xml 文档。 document 对象提供了许多属性和方法用来对整个文档或文档中的数据进行访问和 操作。 通过documen对象可以访问文档中的所有节点, 因为其它节点都是document 沈阳理工大学硕士学位论文 - 14 - 节点的子节点,包括文档类型声明、注释、处理指令及根元素节点等。document 对象包含的主要方法如表 2.1 所示。 表 2.1 document 对象的方法 方法名 作用 createattribute(string) 用给定的属性名创建一个 attr 对象,并使用 setattributenode 方 法 来 将 其 放 置 在 某 一 个 element 对象上面。 createelement(string) 用给定的标签名创建一个 element 对象,代表文 档的一个标签,可以在对这个对象进行相关的操 纵。 createtextnode(string) 用给定的字符串创建一个 text 对象, 它代表了标 签或者属性中所包含的纯文本字符串。当标签里 只有一个标签时,那么 text 对象是这个 element 对象的唯一子对象。 getelementsbytagname(string) 返回一个 nodelist 对象, 它包含了所有给定标签 名字的标签。 getdocumentelement() 返回一个 element 对象,它代表了 dom 树的根 节点,就是代表 xml 文档根元素的那个对象。 loadxml() 将 xml 文档标签解析之后加载到内存当中去。 renamenode() 重新命名节点元素或者属性。 dom 中最基本的对象是 node 对象,它只是一个抽象的节点。在实际使用的 时候,很少会真正的用到 node 这个对象,而是用到诸如 element、attr、text 等 node 对象的子对象来操作文档,那是因为 node 对象为这些对象提供了一个抽象 的、公共的根,虽然在 node 对象中定义了对其子节点进行存取的方法,但是有一 些 node 的子对象,比如 text 对象,它并不存在子节点,所以它是不可以进行操作 的 9。node 对象所包含的主要的方法如表 2.2 所示。 nodelist 对象,它代表了一个包含了一个或者多个 node 的列表,可通过节点 列表中的节点索引号来访问列表中的节点。节点列表可保持其自身的更新。如果 节点列表或 xml 文档中的某个元素被删除或添加,列表也会被自动更新。 nodelist 对象包含的方法如表 2.3 所示。 第 2 章 相关理论及技术的研究 - 15 - element 对象表示 xml 文档中的元素,元素可包含属性、其它元素或文本。 由于元素对象也是一种节点,因此它可继承 node 对象的属性和方法。element 对象的方法如表 2.4 所示。 表 2.2 node 对象的方法 方法名 作用 appendchild() 为某个节点添加一个子节点,同时将该节点放在所 有节点的后面。 getfirstchild() 如果某个节点存在子节点,那么返回第一个子节点 getlastchild() 返回 dom 树中的最后一个子节点。 getnextsibling() 返回在 dom 树中这个节点的下一个兄弟节点 getprevioussibling() 返回在 dom 树中这个节点的前一个兄弟节点。 getnodename() 根据某个节点的类型返回该节点的名称。 getnodevalue() 返回节点的值 haschildnodes() 判断这个节点是否存在子节点。 hasattributes() 判断这个节点是否含有属性。 getownerdocument() 返回这个节点所在的 document 对象。 removechild() 删除某个给定的子节点对象。 replacechild() 用一个新的 node 对象代替某个给定的子节点对象 selectnodes() 用 xpath 的 表达式查询选择节点。 selectsinglenode() 查找和 xpath 查询匹配的一个节点 表 2.3 nodelist 对象的方法 方法名 作用 item() 可返回节点列表中处于指定的索引号的节点。 表 2.4 element 对象的方法 方法名 作用 getelementsbytagname() 找到具有指定标签名的子孙元素。 gettagname() 返回一个代表这个标签名字的字符串。 setattribute() 添加新属性 getattribute() 返回属性的值 getattributenode() 以 attribute 对象返回节点。 沈阳理工大学硕士学位论文 - 16 - attr 对象表示 element 对象的属性,属性的容许值通常定义在 dtd 中,它 attr 继承于 node。但是属性没有有父节点,同时它也不是元素的子节点,对于许 多 node 对象的属性来说都将返回 null。attr 其实是被看作包含它的 element 对象的一部分,它并不作为 dom 树中单独的一个节点出现。这一点在使用的时候 要同其它的 node 子对象相区别 25。 2.4.4 对象关系映射 对象关系映射(object/relation mapping,简称 orm)是为了解决面向对象与 关系数据库存在的互不匹配而产生的技术,是随着面向对象的软件开发方法发展 而产生的 26。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法, 而关系数据库是应用环境中用来永久存储数据的主流数据存储系统。对象和关系 数据是业务实体的两种表现形式,在内存中业务实体是以对象的形式的,而在数 据库中则表现为关系数据。对象可以在内存中存在关联关系和继承关系,而在数 据库中则无法直接表达继承和关联关系。因此 orm 系统一般以中间件的形式存 在,用来实现关系数据与对象之间的映射。它实现的原理如图 2.3 所示。 orm 提供了易于理解的、概念性的模型化数据的方法。orm 的方法论基于 三个核心原则:简单、传达性、精确性 27,是通过使用描述对象和数据库之间映射 的元数据,将程序中的对象自动持久化到关系数据库中,本质上就是将数据从一 种形式转换到另外一种形式。orm 实质上是一种机制,就是将关系数据库中的业 务数据用对象的形式表示出来,并通过面向对象的方式将这些对象组织起来,实 现系统业务逻辑的过程,在 orm 过程中最重要的概念是映射,通过这种映射可以 使业务对象与数据库分离 28。从面向对象来说,关系数据库不应该和业务逻辑绑定 一起, orm 则起到这样的分离作用,使数据库层透明,开发人员真正的面向对象。 面 向 对 象 程 序 对 象 关 系 映 射 关 系 数 据 库 图 2.3 对象关系映射原理图 对象和关系数据库之间的映射是用一个 xml 文档来定义的, 通常是指配置文 件。在这个配置文件容易设计,并且可以手工修改,它是按照持久化类的定义来 第 2 章 相关理论及技术的研究 - 17 - 创建,而非数据库表的定义。 对象关系映射的模式主要有 4 大类: (1) 实体映射 将数据库中的实体映射为一个实体类,对数据库的操作就直接转换为对实体 的操作,这些操作包括为对数据库数据的 crud 等操作。对实体的操作使对数据 库的访问变得简单。实体映射中通常数据库表名与类名是相同的,类与表之间的 映射主要就是表的列与类的属性相互映射,也就是说一个表与映射为一个实体类 时,它们是一一对应的。 (2) 继承关系映射 继承关系映射又分为三种:单表继承体系、实体具体表体系和实体扩展 表体系。所谓单表继承体系就是用一张数据库表存储所有实体的数据。 单表继承 体系优点是读/写继承体系中的每个实体的数据, 都只需操作一张表, 性能较好。 所 谓实体具体表体系就是每个实体对应一张数据表,并且每个数据表冗余包含其 父类的所有属性字段。 所谓实体一扩展表体系是指继承体系中的每个实体对应一 张数据表,但是每个子类不包含父类的属性,而只是包含扩展的属性和共享的主 键值。 (3) 关联映射 常见的关联映射主要有:共享主键的一对一关联映射、共享外键的一对一关 联映射、一对多关联映射、多对一关联映射、多对多关联映射。 (4) 递归关系映射 递归关系映射是指关系的两端指向同一实体(类,数据实体,表等)。 对象关系映射最大的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 边缘计算分布式系统-洞察及研究
- 手持轻物投准课件
- 山东省德州市庆云县2024-2025学年八年级(下)期末物理试卷(含答案)
- 高二年级上学期9月月考历史试卷
- 2025年煤气考试题库及答案
- 手外伤处置原则课件
- 手动工具及安全培训课件
- 中介租房简单版合同范本6篇
- 扇形统计图课件操作说明
- 中级银行从业资格《银行业法律法规与综合能力》提升训练题库卷及答案
- 部编版小学一年级上册语文带拼音阅读练习题26篇
- 无机及分析化学第2章-化学热力学基础1
- GB/T 2930.1-2017草种子检验规程扦样
- 会计学原理模拟试题一套
- 第一章-宗教社会学的发展和主要理论范式课件
- 国内外新能源现状及发展趋势课件
- 临床常见护理技术操作常见并发症的预防与处理课件
- 高速公路改扩建桥梁拼宽施工技术及质量控制
- 双台110kV主变短路电流计算书
- 你不懂咖啡课件
- 危险物品储存安全隐患排查整治表
评论
0/150
提交评论