




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
王红 第9章XML与数据库 2020 3 26 2 主要内容 第9章XML与数据库9 1借助XML文档实现数据库之间数据互换9 2文档结构与数据库结构的映射9 3SQLServer对XML的支持9 4XML数据库9 5小结 2020 3 26 3 当存在大量数据需要处理分析的话 最好是把这些数据放到数据库中几乎所有大型应用系统都是和数据库相关联的 所以如果XML需要在这些领域大展宏图的话 必须要和数据库相联系 2020 3 26 4 9 1借助XML文档实现数据库之间数据互换 XML提供了一种连接关系数据库和面向对象数据库以及其他数据库管理系统之间的纽带关系数据库和面向对象数据库首先需要将数据从数据库中提取出来 经过转换或直接以XML数据形式发布到网上 局域网或Internet网 然后相互交换数据 经应用层系统处理后在转存入库开发一个访问数据库的XML应用系统需要同时借助XML编程接口和数据库编程接口 前者用于对XML文档的解析 定位和查询 后者则是用于访问数据库 2020 3 26 5 XML和数据库 XML文档是一个数据集合优点自我描述性可移植性以树结构描述数据提供部分数据库的功能缺点数据存取慢缺少数据库的功能 2020 3 26 6 XML和数据库 XML文档在数据量较小和用户较少的环境中可以当作数据库使用本地XML数据库专门设计用于存储XML文档的数据库 2020 3 26 7 9 1 1将XML数据插入数据库 将XML数据插入数据库的步骤 使用Class forName 方法加载缺省驱动器使用DriverManager对象的getConnection 方法建立数据库连接使用Connection对象创建Statement对象将已解析的XML文档放在Document对象中使用getElementsByTagName 方法检索其元素使用Insert语句将数据插入数据库 2020 3 26 8 将XML中的数据插入数据库 2020 3 26 9 实例 下面例xml2db java 将candidate xml文档中的数据存储到一个ACCESS数据库people中表的结构如图9 1所示 2020 3 26 10 实例 importjava sql importjavax xml parsers importorg w3c dom publicclassxml2db staticConnectioncon staticStringnm add tel fax email sql publicstaticvoidmain Stringargs try Class forName sun jdbc odbc JdbcOdbcDriver con DriverManager getConnection jdbc odbc people Statementstmt con createStatement 2020 3 26 11 实例 续 DocumentBuilderFactoryfactory DocumentBuilderFactory newInstance DocumentBuilderbuilder factory newDocumentBuilder Documentdoc builder parse candidate xml NodeListnl doc getElementsByTagName PERSON for inti 0 i nl getLength i Elementnode Element nl item i Stringnm node getElementsByTagName NAME item 0 getFirstChild getNodeValue sql insertintopeoplevalues nm add tel fax email intret stmt executeUpdate sql stmt close con close catch Exceptione e printStackTrace 运行结果如图9 2所示 2020 3 26 12 图9 2xml2db java运行结果 2020 3 26 13 9 1 2由数据库中数据生成XML文档 从数据库检索数据生成XML的步骤 将文件头和根元素写入文件使用Class forName 方法加载缺省驱动程序使用DriverManager对象的getConnection 方法建立数据库连接使用Connection对象创建Statement对象使用Statement对象的executeQuery方法执行查询从数据库提取数据并将其插入文件中将结束元素写入文件 2020 3 26 14 用数据库中的数据生成XML文档 2020 3 26 15 实例 下面举例Sdudents java 将一个ACCESS数据库students中数据存储到students xml文档中表的内容如图9 3所示 2020 3 26 16 实例 importjava sql importjava io importjavax xml parsers importjavax xml transform dom importjavax xml transform stream importjavax xml transform importorg w3c dom importorg xml sax Filefl newFile students xml fl createNewFile FileWriterfw newFileWriter fl Class forName sun jdbc odbc JdbcOdbcDriver Connectioncon DriverManager getConnection jdbc odbc aaa Statementst con createStatement ResultSet TYPE SCROLL SENSITIVE ResultSet CONCUR UPDATABLE ResultSetrs st executeQuery select fromstudents 2020 3 26 17 实例 while rs next fw write fw write Stringstud id rs getString Stud id fw write stud id fw write fw write Stringstud name rs getString Stud name fw write stud name fw write fw write 运行结果如图9 4所示 2020 3 26 18 图9 4Sdudents java运行结果 2020 3 26 19 实例 下面举例db2xml java 用org apache crimson tree包中的XmlDocument类的write 方法将一个ACCESS数据库people中数据存储到candidate1 xml文档中的表的内容如图9 2所示程序运行结果使candidate1 xml与前面用到的candidate xml完全相同 2020 3 26 20 实例 importjava sql importjavax xml parsers importorg apache crimson tree importorg w3c dom importjava io publicclassdb2xml staticStringnm add tel fax email sql staticStringurl jdbc oracle oci8 oradb publicstaticvoidmain Stringargs Elementpeople person name address tel fax email try Class forName oracle jdbc driver OracleDriver Connectioncon DriverManager getConnection url scott tiger Statementstmt con createStatement ResultSetresults stmt executeQuery SELECT FROMpeople DocumentBuilderFactorydbf DocumentBuilderFactory newInstance DocumentBuilderbuilder dbf newDocumentBuilder Documentdoc builder newDocument people doc createElement PEOPLE 2020 3 26 21 实例 续 while results next person doc createElement PERSON people appendChild person name doc createElement NAME name appendChild doc createTextNode results getString NAME person appendChild name doc appendChild people XmlDocument doc write System out catch Exceptione e printStackTrace 2020 3 26 22 9 2文档结构与数据库结构的映射 把数据存储到数据库中的时候 需要抛弃一个文档的很多信息比如它的名称和DTD同样 当从数据库中提取数据的时候 产生的XML文档通常不包含CDATA或者是实体使用的说明 而且节点下元素的排列位置只和数据库中记录的顺序位置一致一个XML文档存储到数据库中 再由该数据库生成此XML文档 这前后两个文档格式几乎不可能完全一样 2020 3 26 23 9 2文档结构与数据库结构的映射 为了在数据库和XML文档之间传递数据 必须在数据库数据模型和XML数据模型产生映射关系数据库数据是结构化数据XML文档属于半结构化的数据将结构化数据与非结构化数据进行转换的时候 关键问题是建立不同结构层次之间的映射关系 及如何保留他们的语义约束信息 即如何将关系数据库表达的结构与约束映射为XML 映射可以有两类 模板驱动和模型驱动 2020 3 26 24 9 2 1基于模板驱动的映射 基于模板的映射方法并不事先定义好XML文档与其他数据之间的映射关系 而是在XML文档中嵌入带参数的SQL命令 这些命令在转换过程中被系统所识别和执行 执行的结果被替换到指令所在的位置 从而生成目标XML文档 并用数据传输诸如中间件等实体软件进行处理 2020 3 26 25 9 2文档结构与数据库结构的映射 比如 考虑下面的模板 xmlversion 1 0 FlightInfo Intro Thefollowingflightshaveavailableseats Intro SelectStmt SELECTAirline FltNumber Depart ArriveFROMFlights SelectStmt Conclude Wehopeoneofthesemeetsyourneeds Conclude FlightInfo 2020 3 26 26 9 2文档结构与数据库结构的映射 当用数据传输中间件进行处理的时候 每一个SELECT语句都会被它的结果所代替 用XML格式化形式表现为 xmlversion 1 0 FlightInfo Intro Thefollowingflightshaveavailableseats Intro Flights Row Airline ACME Airline FltNumber 123 FltNumber Depart Dec12 199813 43 Depart Arrive Dec13 199801 21 Arrive Row Flights Conclude Wehopeoneofthesemeetsyourneeds Conclude FlightInfo 2020 3 26 27 9 2文档结构与数据库结构的映射 基于模板转换的流程图 2020 3 26 28 9 2文档结构与数据库结构的映射 优点 基于模板驱动的映射可以是相当灵活的允许你把结果集放到XML文档的任何位置同时可以对SELECT语句设置参数并且可以使用for循环语句和if条件语句等 2020 3 26 29 9 2文档结构与数据库结构的映射 缺点 基于模板驱动的映射是一种浅层映射以XML内嵌的SQL执行的数据结果集为依据 不涉及数据库赖以存在的关系模式舍弃了关系模式的种种约束条件只适合于将关系数据库的数据转换为XML文档 2020 3 26 30 9 2 2基于模型驱动的映射 就是把数据从数据库传送到XML文档是用一个具体的模型实现的 这样 用户可以将相应的格式直接映射到模型上 从而数据库中数据以各种形式展示出来 在XML文档中 两种模型是很常见的 表格模型和数据专用对象模型 2020 3 26 31 1 表格模型 把XML文档表示为一个单一的表格或者是表格的集合 这样数据库中数据都展示为固定模式 一般地 数据库中数据可以用如下的形式表示 database table row column1 column1 column2 column2 row table database 2020 3 26 32 1 表格模型 这里关键字 table 在把数据从数据库传递到XML文档的时候 表示一个单一的结果集 但是 当结果集合不只一个的时候 或者当XML文档包括多个复杂嵌套的时候 这种传递方式就不能适应了 2020 3 26 33 2 数据专用的对象模型 把一个XML文档表示为由数据对象构成的树 每一个元素类型和对象相对应 主要在面向对象和层次数据库中使用 通过传统的关系 对象模型也可以映射到关系数据库中 2020 3 26 34 2 数据专用的对象模型 基于模型的转换方法由于有了数据模型的支持 可以完成关系数据库数据和XML数据之间的双向转换 但是模型的引入也使得XML文档的结构受到了一些限制 一个XML文档必须符合模型所规定的结构 才能将XML文档转换成其他类型的数据 而从其他类型数据转换得到的XML文档也具有某种结构特点 基于模型的转换方法的关键在于设计一个灵活的映射模型 为了更好的支持其双向映射的特点 这个映射模型必须是易于 读懂 的 易于操纵的 能够很好的表达关系数据库的各种约束 模型驱动的映射是一种深层映射 是模式和模式之间的映射 2020 3 26 35 2 数据专用的对象模型 在XML和数据库之间进行数据转化的时候 需要考虑两个过程 一个是从数据库模式中产生DTD 另外一个是根据DTD生成数据库模式 从一个DTD中生成一个关系模式的步骤如下 1 对每一个元素 产生一个表和一个主键列 2 对每一个有混合内容的元素 产生一个独立的表格 用来存储PCDATA 并通过父表的主键和父表相联 3 对元素类型中的每一个单一值的属性 对具有只有PCDATA内容的子元素 该子元素按顺序出现 产生一个单独的列 如果子元素类型或者值是可以选择的话 该列就应该可以允许为NULL类型 2020 3 26 36 2 数据专用的对象模型 4 对有多个值的属性和可以出现多次的子元素 该子元素PCDATA 的话 需要创建一个单独的表来存储这些值 并通过父表的主键和父表相联 5 对每一个包含元素或者混合内容的子元素来说 通过父表的主键把父元素和子元素联接起来 从一个关系数据库模式构建DTD步骤如下 1 对每一个表 创建一个元素 2 对表中的每一列 创建一个属性或者是一个只有PCDATA内容的子元素 3 根据表中的每一主键 外键关系 创建该表元素的子元素 2020 3 26 37 9 3SQLServer对XML的支持 在SQLServer中实现了对XML使用HTTP执行简单查询 应用XSL样式单的查询 使用模板查询 使用XPath查询 SQLServer2000的XML功能主要包括如下内容 许用户通过网络查询SQLServer中数据 并以XML格式获得返回结果 持XDR 简化的XML DATA 架构 并可以使用XPath查询XDR架构 允许查询和写入XML数据 使用SELECT语句和FORXML字句检索XML数据 使用XPath查询语言检索XML数据 增强了MicrosoftSQLServer2000OLEDB提供程序 从而可以使用XML文档作为命令文本并以流的形式返回结果集 2020 3 26 38 9 3 1配置IIS服务器支持SQLXML 在Windows2000中 有自带的IIS5 0 如果是WindowsNT 则在最新的serverpack中包含了新的IIS IIS服务器建立了用户和SQLServer之间的桥梁 用户通过浏览器发出URL查询请求 IIS首先接收到查询结果 然后将请求通过OLEDB接口传递给SQLServer SQLServer以XML格式返回的查询结果再返回到用户的浏览器中 在IIS服务器中完成XML格式数据通信需要通过SQLServer2000的XML组件 sqlsapi dll和sqlxml dll 来完成 2020 3 26 39 9 3 1配置IIS服务器支持SQLXML 在使用HTTP访问SQLServer2000数据库之前 必须根据使用方式创建适当的虚拟目录 必须将IIS服务器和虚拟目录的名称指定为URL的一部分 2020 3 26 40 9 3 1配置IIS服务器支持SQLXML 根据使用HTTP访问SQLServer2000数据库的不同方式 需要创建适当的虚拟目录 1 直接访问数据库对象 例如表 在这种情况下 需要创建dbobject类型的虚拟目录 2 执行模板文件 在这种情况下 需要创建template类型的虚拟目录 3 执行XPath查询 在这种情况下 需要创建schema类型的虚拟目录 2020 3 26 41 9 3 1配置IIS服务器支持SQLXML 下面举例说明各种查询方式的使用 这几种查询方式都是用下面的表 2020 3 26 42 9 3 2使用HTTP执行简单查询 使用了简单查询来获得 书籍 表中的书名 http localhost xmlquery sql selectf 书名 from 书籍 for xml auto root 书名清单该查询将返回的XML文档根元素设置为 书名清单 并以AUTO方式返回结果 查询结果如图9 9所示 2020 3 26 43 图9 9简单查询结果 2020 3 26 44 9 3 3应用XSL样式单的查询 可以使用样式单元来定义XML查询结果在浏览器中的表现形式 要使用样式单 需要在查询时使用XSL参数指定样式单文件 下面的查询使用XSL样式单以表格方式显示查询结果 http localhost xmlquery sql select 书名 from 书籍 for xml auto root 图书清单 xsl table xsl其中xsl table xsl指定了使用的样式单文件应用了样式单后的查询结果如图9 10所示 2020 3 26 45 图9 10应用了样式单后的查询结果 2020 3 26 46 9 3 4使用模板查询 直接在浏览器地址栏中输入过长的SQL查询语句非常不便为解决这一问题 SQLServer引入了模板的概念 一个查询模板实际上就是一个包含SQL查询的XML或XPath查询的XML文档 然后在URL中指定模板文件的方式来执行查询 2020 3 26 47 9 3 4使用模板查询 在查询模板中 可以定义如下内容 1 指定SQL查询或XPath查询 2 指定通过执行SQL或XPath查询所返回的XML片段的根元素 从而使在URL中执行模板的结果是有效的XML文档 3 定义可被传递到SQL语句或XPath查询的参数 4 声明命名空间 5 指定将应用于所得到文档的可扩展样式语言XSL样式表 6 定义查询模板 2020 3 26 48 9 3 4使用模板查询 使用XML文档定义的查询模板具有如下格式 Sqlstatement s XPathquery 2020 3 26 49 9 3 4使用模板查询 第一步 使用模板执行SQL简单查询 xmlversion 1 0 encoding gb2312 图书清单xmlns sql urn schemas microsoft com xml sql sql query SELECT书名 作者 出版社FROM书籍FORXMLAUTO sql query 图书清单 2020 3 26 50 9 3 4使用模板查询 第二步 在模板执行存储过程 在 书籍 数据库中创建如下的存储过程 CREATEPROCEDUREgetinfoASSelect书名 作者 出版社from书籍forxmlauto 2020 3 26 51 9 3 4使用模板查询 第三步 在模板中创建参数查询 xmlversion 1 0 encoding gb2312 图书清单xmlns sql urn schemas microsoft com xml sql sql header sql paramname 姓名 郭胜 sql param sql header sql query select from书籍where作者 姓名forxmlauto elements sql query 图书清单 2020 3 26 52 9 3 4使用模板查询 下面的URL使用参数的默认值来执行查询 http localhost xmlquery mytemplate paramquery xml在浏览器中执行结果如图9 11所示 2020 3 26 53 9 3 5使用XPath查询 XPath查询是使用简化的XML数据架构为关系数据创建的XML视图第一步 使用带批注的XDR创建XML视图第二步 使用默认属性映射架构建立与数据的XPath查询第三步 使用特定属性映射架构的XPath查询第四步 返回CDATA节内容 2020 3 26 54 9 3 4使用模板查询 第三步 在模板中创建参数查询 xmlversion 1 0 encoding gb2312 图书清单xmlns sql urn schemas microsoft com xml sql sql header sql paramname 姓名 郭胜 sql param sql header sql query select from书籍where作者 姓名forxmlauto elements sql query 图书清单 2020 3 26 55 9 4XML数据库 20世纪60年代早期称为前关系型数据库系统时期 1970年 E F Codd在IBM的SanJose研究实验室推出了关系数据模型虽然关系型数据库技术已经相当成熟 但其局限性也显而易见 它能很好地处理所谓的 表格型数据 却对各种复杂类型的数据无能为力 20世纪90年代初期开始 人们研究和开发 面向对象的数据库系统 数据库发展进入了后关系型数据库系统时期 20世纪90年代末期出现了XML数据库 数据库管理系统的发展历程如图9 15所示 2020 3 26 56 图9 15数据库管理系统发展 2020 3 26 57 9 4 1XML和半结构化数据 现实世界中 一些数据是完全没有结构的 如video audio image数据流 很多数据既不是完全没有结构 也不是完全有结构的 如HTML构成的Web页 电子邮件 Latex文档 生物数据库 如ACeDB 等等 我们把它们称为半结构化数据 与传统的结构化数据相比 半结构化数据主要特性是自描述的 即内容与结构都包含在数据中 它的结构是不固定 不规则 隐含的 并且是易变化的 由于Web数据 数据集成 数据交换都需要利用半结构化数据 因此要从数据库角度研究半结构化数据的数据模型 数据模式 数据查询 查询优化 2020 3 26 58 9 4 1XML和半结构化数据 XML文档代表了一个重要的并且在不断增长的半结构化数据源它同半结构化数据有许多共同的性质 因此半结构化数据己有的理论 己有的原型系统可以作为XML研究的基础XML与经典的半结构化数据之间也有区别 使其成为一种独特的半结构数据类型 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吸痰技术试题及答案
- 铆工技术理论试题及答案
- 2025年春季部编版初中数学教学设计八年级下册第2课时 正方形的判定
- 《2025设备租赁合同范本共享》
- 2025面的合同租赁合同范本
- 公司财税知识培训课件
- 搞笑反诈骗课件
- 国际市场营销(第7版·数字教材版)课件 第1-7章 国际市场营销导论-国际大市场营销
- 求职路上如何应对蒙古特色面试题?实战技巧分享
- 《2025年物流公司挂靠合作协议》
- 《电工》国家职业技能鉴定教学计划及大纲
- 零星维修工程(技术标)
- 篮球投篮教学的课件
- 园林绿化施工现场组织协调方案与措施
- 中专生招生管理办法细则
- 2025年度江苏行政执法资格考试模拟卷及答案(题型)
- 续保团队职场管理办法
- 2025至2030直接甲醇燃料电池(DMFC)行业发展趋势分析与未来投资战略咨询研究报告
- 江苏南京师范大学附属中学2024~2025学年高一下册6月期末考试数学试题学生卷
- 医院质控科服务质量职责
- 船舶公司维修管理制度
评论
0/150
提交评论