[工学]《动态Web数据库技术——基于JSP和XML技术实现》-9xml与数据库.ppt_第1页
[工学]《动态Web数据库技术——基于JSP和XML技术实现》-9xml与数据库.ppt_第2页
[工学]《动态Web数据库技术——基于JSP和XML技术实现》-9xml与数据库.ppt_第3页
[工学]《动态Web数据库技术——基于JSP和XML技术实现》-9xml与数据库.ppt_第4页
[工学]《动态Web数据库技术——基于JSP和XML技术实现》-9xml与数据库.ppt_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

王红,第9章 XML与数据库,2019/4/19,2,主要内容,第9章 XML与数据库 9.1 借助XML文档实现数据库之间数据互换 9.2 文档结构与数据库结构的映射 9.3 SQL Server对XML的支持 9.4 XML数据库 9.5 小 结,2019/4/19,3,当存在大量数据需要处理分析的话,最好是把这些数据放到数据库中 几乎所有大型应用系统都是和数据库相关联的,所以如果XML需要在这些领域大展宏图的话,必须要和数据库相联系,2019/4/19,4,9.1 借助XML文档实现数据库之间数据互换,XML提供了一种连接关系数据库和面向对象数据库以及其他数据库管理系统之间的纽带 关系数据库和面向对象数据库首先需要将数据从数据库中提取出来,经过转换或直接以XML数据形式发布到网上(局域网或Internet网),然后相互交换数据,经应用层系统处理后在转存入库 开发一个访问数据库的XML应用系统需要同时借助XML编程接口和数据库编程接口,前者用于对XML文档的解析、定位和查询,后者则是用于访问数据库,2019/4/19,5,XML和数据库,XML 文档是一个数据集合 优点 自我描述性 可移植性 以树结构描述数据 提供部分数据库的功能 缺点 数据存取慢 缺少数据库的功能,2019/4/19,6,XML和数据库,XML 文档在数据量较小和用户较少的环境中可以当作数据库使用 本地 XML 数据库 专门设计用于存储 XML 文档的数据库,2019/4/19,7,9.1.1 将XML数据插入数据库,将 XML 数据插入数据库的步骤: 使用 Class.forName() 方法加载缺省驱动器 使用 DriverManager 对象的 getConnection() 方法建立数据库连接 使用 Connection 对象创建 Statement 对象 将已解析的 XML 文档放在 Document 对象中 使用 getElementsByTagName() 方法检索其元素 使用 Insert 语句将数据插入数据库,2019/4/19,8,将XML中的数据插入数据库,2019/4/19,9,实例,下面例xml2db.java,将candidate.xml文档中的数据存储到一个ACCESS数据库people中 表的结构如图9-1所示,2019/4/19,10,实例,import java.sql.*; import javax.xml.parsers.*; import org.w3c.dom.*; public class xml2db static Connection con; static String nm, add, tel, fax, email, sql; public static void main(String args) try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“ ); con = DriverManager.getConnection(“jdbc:odbc:people“, “, “ ); Statement stmt = con.createStatement();,2019/4/19,11,实例(续),DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc=builder.parse(“candidate.xml“); NodeList nl =doc.getElementsByTagName(“PERSON“); for (int i=0;inl.getLength();i+) Element node=(Element) nl.item(i); String nm = node.getElementsByTagName(“NAME“).item(0). getFirstChild().getNodeValue(); sql = “insert into people values(“+nm+“, “+add+“, “+tel+“,“+fax+“, “+email+“)“; int ret = stmt.executeUpdate(sql); stmt.close(); con.close(); catch(Exception e)e.printStackTrace(); ,运行结果如图9-2所示,2019/4/19,12,图9-2 xml2db.java运行结果,2019/4/19,13,9.1.2 由数据库中数据生成XML文档,从数据库检索数据生成XML的步骤: 将文件头和根元素写入文件 使用 Class.forName() 方法加载缺省驱动程序 使用 DriverManager 对象的 getConnection() 方法建立数据库连接 使用 Connection 对象创建 Statement 对象 使用 Statement 对象的 executeQuery 方法执行查询 从数据库提取数据并将其插入文件中 将结束元素写入文件,2019/4/19,14,用数据库中的数据生成XML文档,2019/4/19,15,实例,下面举例Sdudents.java,将一个ACCESS数据库students中数据存储到students.xml文档中 表的内容如图9-3所示,2019/4/19,16,实例,import java.sql.*; import java.io.*; import javax.xml.parsers.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*; import javax.xml.transform.*; import org.w3c.dom.*; import org.xml.sax.*; File fl=new File(“students.xml“); fl.createNewFile(); FileWriter fw=new FileWriter(fl); Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); Connection con=DriverManager.getConnection(“jdbc:odbc:aaa“,“,“); Statement st=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs=st.executeQuery(“select * from students“);,2019/4/19,17,实例,while(rs.next() fw.write(“); fw.write(“); String stud_id=rs.getString(“Stud_id“); fw.write(stud_id); fw.write(“); fw.write(“); String stud_name=rs.getString(“Stud_name“); fw.write(stud_name); fw.write(“); fw.write(“); 运行结果如图9-4所示,2019/4/19,18,图9-4 Sdudents.java运行结果,2019/4/19,19,实例,下面举例db2xml.java,用org.apache.crimson.tree包中的XmlDocument类的 write()方法将一个ACCESS数据库people中数据存储到candidate1.xml文档中的 表的内容如图9-2所示 程序运行结果使candidate1.xml与前面用到的candidate.xml完全相同,2019/4/19,20,实例,import java.sql.*; import javax.xml.parsers.*; import org.apache.crimson.tree.*; import org.w3c.dom.*; import java.io.*; public class db2xml static String nm, add, tel, fax, email, sql; static String url = “jdbc:oracle:oci8:oradb“; public static void main(String args) Element people, person, name, address, tel, fax, email; try Class.forName(“oracle.jdbc.driver.OracleDriver“); Connection con = DriverManager.getConnection(url, “scott“, “tiger“); Statement stmt = con.createStatement(); ResultSet results = stmt.executeQuery(“SELECT * FROM people“); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder builder=dbf.newDocumentBuilder(); Document doc = builder.newDocument(); people = doc.createElement(“PEOPLE“);,2019/4/19,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(Exception e) e.printStackTrace(); ,2019/4/19,22,9.2 文档结构与数据库结构的映射,把数据存储到数据库中的时候,需要抛弃一个文档的很多信息比如它的名称和DTD 同样,当从数据库中提取数据的时候,产生的XML文档通常不包含CDATA或者是实体使用的说明,而且节点下元素的排列位置只和数据库中记录的顺序位置一致 一个XML文档存储到数据库中,再由该数据库生成此XML文档,这前后两个文档格式几乎不可能完全一样,2019/4/19,23,9.2 文档结构与数据库结构的映射,为了在数据库和XML文档之间传递数据,必须在数据库数据模型和XML数据模型产生映射 关系数据库数据是结构化数据 XML文档属于半结构化的数据 将结构化数据与非结构化数据进行转换的时候,关键问题是建立不同结构层次之间的映射关系,及如何保留他们的语义约束信息,即如何将关系数据库表达的结构与约束映射为XML。 映射可以有两类:模板驱动和模型驱动。,2019/4/19,24,9.2.1 基于模板驱动的映射,基于模板的映射方法并不事先定义好XML文档与其他数据之间的映射关系,而是在XML文档中嵌入带参数的SQL命令。 这些命令在转换过程中被系统所识别和执行,执行的结果被替换到指令所在的位置,从而生成目标XML文档.并用数据传输诸如中间件等实体软件进行处理,2019/4/19,25,9.2 文档结构与数据库结构的映射,比如,考虑下面的模板 : ?xml version=“1.0“? FlightInfo IntroThe following flights have available seats:/Intro SelectStmtSELECT Airline,FltNumber,Depart,Arrive FROM Flights /SelectStmt ConcludeWe hope one of these meets your needs /Conclude /FlightInfo,2019/4/19,26,9.2 文档结构与数据库结构的映射,当用数据传输中间件进行处理的时候,每一个SELECT语句都会被它的结果所代替,用XML格式化形式表现为: ?xml version=“1.0“? FlightInfo IntroThe following flights have available seats:/Intro Flights Row AirlineACME/Airline FltNumber123/FltNumber DepartDec 12, 1998 13:43/Depart ArriveDec 13, 1998 01:21/Arrive /Row /Flights ConcludeWe hope one of these meets your needs/Conclude /FlightInfo,2019/4/19,27,9.2 文档结构与数据库结构的映射,基于模板转换的流程图 :,2019/4/19,28,9.2 文档结构与数据库结构的映射,优点: 基于模板驱动的映射可以是相当灵活的 允许你把结果集放到XML文档的任何位置 同时可以对SELECT语句设置参数 并且可以使用for循环语句和if条件语句等。,2019/4/19,29,9.2 文档结构与数据库结构的映射,缺点: 基于模板驱动的映射是一种浅层映射 以XML内嵌的SQL执行的数据结果集为依据,不涉及数据库赖以存在的关系模式 舍弃了关系模式的种种约束条件 只适合于将关系数据库的数据转换为XML文档,2019/4/19,30,9.2.2 基于模型驱动的映射,就是把数据从数据库传送到XML文档是用一个具体的模型实现的。 这样,用户可以将相应的格式直接映射到模型上,从而数据库中数据以各种形式展示出来。 在XML文档中,两种模型是很常见的:表格模型和数据专用对象模型。,2019/4/19,31,1. 表格模型,把XML文档表示为一个单一的表格或者是表格的集合,这样数据库中数据都展示为固定模式。 一般地,数据库中数据可以用如下的形式表示: database table row column1./column1 column2./column2 . /row . /table . /database,2019/4/19,32,1. 表格模型,这里关键字“table”在把数据从数据库传递到XML文档的时候,表示一个单一的结果集。 但是,当结果集合不只一个的时候,或者当XML文档包括多个复杂嵌套的时候,这种传递方式就不能适应了。,2019/4/19,33,2. 数据专用的对象模型,把一个XML文档表示为由数据对象构成的树,每一个元素类型和对象相对应。 主要在面向对象和层次数据库中使用,通过传统的关系-对象模型也可以映射到关系数据库中 。,2019/4/19,34,2. 数据专用的对象模型,基于模型的转换方法由于有了数据模型的支持,可以完成关系数据库数据和XML数据之间的双向转换。 但是模型的引入也使得XML文档的结构受到了一些限制,一个XML文档必须符合模型所规定的结构,才能将XML文档转换成其他类型的数据,而从其他类型数据转换得到的XML文档也具有某种结构特点。 基于模型的转换方法的关键在于设计一个灵活的映射模型,为了更好的支持其双向映射的特点,这个映射模型必须是易于“读懂”的,易于操纵的,能够很好的表达关系数据库的各种约束。 模型驱动的映射是一种深层映射,是模式和模式之间的映射。,2019/4/19,35,2. 数据专用的对象模型,在XML和数据库之间进行数据转化的时候,需要考虑两个过程:一个是从数据库模式中产生DTD,另外一个是根据DTD生成数据库模式. 从一个DTD中生成一个关系模式的步骤如下: (1)对每一个元素,产生一个表和一个主键列。 (2)对每一个有混合内容的元素,产生一个独立的表格,用来存储PCDATA,并通过父表的主键和父表相联。 (3)对元素类型中的每一个单一值的属性,对具有只有PCDATA内容的子元素(该子元素按顺序出现),产生一个单独的列,如果子元素类型或者值是可以选择的话,该列就应该可以允许为NULL类型。,2019/4/19,36,2. 数据专用的对象模型,(4)对有多个值的属性和可以出现多次的子元素(该子元素PCDATA)的话,需要创建一个单独的表来存储这些值,并通过父表的主键和父表相联。 (5)对每一个包含元素或者混合内容的子元素来说,通过父表的主键把父元素和子元素联接起来。 从一个关系数据库模式构建DTD步骤如下: (1)对每一个表,创建一个元素。 (2)对表中的每一列,创建一个属性或者是一个只有PCDATA内容的子元素。 (3)根据表中的每一主键外键关系,创建该表元素的子元素。,2019/4/19,37,9.3 SQL Server对XML的支持,在SQL Server中实现了对XML使用HTTP执行简单查询、应用XSL样式单的查询、使用模板查询、使用XPath查询。 SQL Server 2000 的XML 功能主要包括如下内容: 许用户通过网络查询SQL Server中数据,并以XML 格式获得返回结果。 持XDR(简化的XML_DATA)架构,并可以使用XPath查询XDR架构。 允许查询和写入XML 数据。使用SELECT 语句和FOR XML字句检索XML数 据。 使用XPath查询语言检索XML数据。 增强了Microsoft SQL Server 2000 OLE DB提供程序,从而可以使用XML文档作为命令文本并以流的形式返回结果集。,2019/4/19,38,9.3.1 配置IIS服务器支持SQL XML,在Windows 2000中,有自带的IIS5.0。 如果是Windows NT,则在最新的server pack中包含了新的IIS。 IIS服务器建立了用户和SQL Server之间的桥梁。用户通过浏览器发出URL查询请求,IIS首先接收到查询结果,然后将请求通过OLEDB接口传递给SQL Server。SQL Server以XML格式返回的查询结果再返回到用户的浏览器中。 在IIS服务器中完成XML格式数据通信需要通过SQL Server 2000的XML组件(sqlsapi.dll和sqlxml.dll)来完成。,2019/4/19,39,9.3.1 配置IIS服务器支持SQL XML,在使用HTTP访问SQL Server 2000数据库之前,必须根据使用方式创建适当的虚拟目录。 必须将IIS服务器和虚拟目录的名称指定为URL的一部分,2019/4/19,40,9.3.1 配置IIS服务器支持SQL XML,根据使用HTTP访问SQL Server 2000数据库的不同方式,需要创建适当的虚拟目录: (1)直接访问数据库对象,例如表。在这种情况下,需要创建dbobject类型的虚拟目录。 (2)执行模板文件。在这种情况下,需要创建template类型的虚拟目录 (3)执行XPath查询。在这种情况下,需要创建schema类型的虚拟目录,2019/4/19,41,9.3.1 配置IIS服务器支持SQL XML,下面举例说明各种查询方式的使用。 这几种查询方式都是用下面的表:,2019/4/19,42,9.3.2 使用HTTP执行简单查询,使用了简单查询来获得“书籍”表中的书名: http:/localhost/xmlquery?sql=selectf+书名+from+书籍+for+xml+auto&root=+书名清单 该查询将返回的XML文档根元素设置为“书名清单”,并以AUTO方式返回结果。 查询结果如图9-9所示,2019/4/19,43,图9-9 简单查询结果,2019/4/19,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所示,2019/4/19,45,图9-10 应用了样式单后的查询结果,2019/4/19,46,9.3.4 使用模板查询,直接在浏览器地址栏中输入过长的SQL查询语句非常不便 为解决这一问题,SQL Server引入了模板的概念。 一个查询模板实际上就是一个包含SQL查询的XML或XPath查询的XML文档,然后在URL中指定模板文件的方式来执行查询,2019/4/19,47,9.3.4 使用模板查询,在查询模板中,可以定义如下内容: (1)指定SQL查询或XPath查询。 (2)指定通过执行SQL或XPath查询所返回的XML片段的根元素,从而使在URL中执行模板的结果是有效的XML文档。 (3)定义可被传递到SQL语句或XPath查询的参数。 (4)声明命名空间。 (5)指定将应用于所得到文档的可扩展样式语言XSL样式表。 (6)定义查询模板,2019/4/19,48,9.3.4 使用模板查询,使用XML文档定义的查询模板具有如下格式: Sql statement(s) XPath query ,2019/4/19,49,9.3.4 使用模板查询,第一步:使用模板执行SQL简单查询。 ?xml version=“1.0”encoding=“gb2312”? 图书清单 xmlns:sql=“urn:schemas-microsoft-com:xml-sql” sql:query SELECT 书名,作者,出版社 FROM 书籍 FOR XML AUTO /sql:query /图书清单,2019/4/19,50,9.3.4 使用模板查询,第二步:在模板执行存储过程。 在“书籍”数据库中创建如下的存储过程: CREATE PROCEDURE getinfo AS Select 书名,作者,出版社 from 书籍 for xml auto,2019/4/19,51,9.3.4 使用模板查询,第三步:在模板中创建参数查询。 ?xml version=“1.0”encoding=“gb2312”? 图书清单 xmlns:sql=“urn:schemas-microsoft-com:xml-sql” sql:header sql:param name=姓名郭胜/sql:param /sql:header sql:query select * from 书籍 where 作者=姓名 for xml auto,elements /sql:query /图书清单,2019/4/19,52,9.3.4 使用模板查询,下面的URL使用参数的默认值来执行查询: http:/localhost/xmlquery/mytemplate/paramquery.xml 在浏览器中执行结果如图9-11所示,2019/4/19,53,9.3.5 使用XPath查询,XPath查询是使用简化的XML数据架构为关系数据创建的XML视图 第一步,使用带批注的XDR创建XML视图 第二步,使用默认属性映射架构建立与数据的XPath查询 第三步,使用特定属性映射架构的XPath查询 第四步,返回CDATA节内容,2019/4/19,54,9.3.4 使用模板查询,第三步:在模板中创建参数查询。 ?xml version=“1.0”encoding=“gb2312”? 图书清单 xmlns:sql=“urn:schemas-microsoft-com:xml-sql” sql:header sql:param name=姓名郭胜/sql:param /sql:header sql:query select * from 书籍 where 作者=姓名 for xml auto,elements /sql:query /图书清单,2019/4/19,55,9.4 XML数据库,20世纪60年代早期称为前关系型数据库系统时期。 1970年,E.F.Codd在IBM的San Jose研究实验室推出了关系数据模型 虽然关系型数据库技术已经相当成熟,但其局限性也显而易见:它能很好地处理所谓的“表格型数据”,却对各种复杂类型的数据无能为力。 20世纪90年代初期开始,人们研究和开发“面向对象的数据库系统”,数据库发展进入了后关系型数据库系统时期。 20世纪90年代末期出现了XML数据库。 数据库管理系统的发展历程如图9-15所示,2019/4/19,56,图9-15 数据库管理系统发展,2019/4/19,57,9.4.1 XML和半结构化数据,现实世界中,一些数据是完全没有结构的,如video、audio、image数据流。 很多数据既不是完全没有结构,也不是完全有结构的,如HTML构成的Web页、电子邮件、Latex文档、生物数据库(如ACeDB)等等。我们把它们称为半结构化数据。 与传统的结构化数据相比,半结构化数据主要特性是自描述的(即内容与结构都包含在数据中),它的结构是不固定、不规则、隐含的,并且是易变化的。 由于Web数据、数据集成、数据交换都需要利用半结构化数据,因此要从数据库角度研究半结构化数据的数据模型、数据模式、数据查询、查询优化。,2019/4/19,58,9.4.1 XML和半结构化数据,XML文档代表了一个重要的并且在不断增长的半结构化数据源 它同半结构化数据有许多共同的性质 ,因此半结构化数据己有的理论,己有的原型系统可以作为X

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论