41、在关系数据库中,数据仅仅是数据,它不包含层次结构信息;而面向对象数据库可以将数据视为对象,数据是作为一个整体,包含了属性和方法,并能体现数据间的继承关系。
42、一个基于XML的数据库系统应该具备以下特征:
1能够根据文档类型定义(DTD或Schema)确定数据库的模式。 也就是说,能够按照DTD或Schema来定义数据库,而无须再进行数据库的设计, 能够按照DTD或Schema的层次结构来进行基于XML语法的定位和查询。通过元素名字和属性来查询和定位元素。 2支持DOM和SAX,可以进行事件驱动的XML处理。 3内置数据处理语言模块(XML语法分析器),能够进行XML文档数据的语法分析,同时对数据库中的元素进行直接的定位操作。 4提供标准的XML查询语言。通过套用一定的样式模式,输出多种格式的XML文档。 5能够处理大型数据集合,能够对置标文本的结构和内容进行索引。 6提供开发工具包,支持DOM、SAX、Java、Script语言等。 7提供一定的机制保证数据的一致性。如通过行级或页级共享锁、排他锁对数据加锁,满足用户对数据进行并发读写时数据的有效性。 8支持OLAP和数据仓库等高级应用。43、对数据库操作ASP和DTD(Schema)的具体实现:
ASP:
% @language = "VBScript" %% Response.ContentType = "text/xml" % ?xml version="1.0" encoding="GB2312" ?%’动态构建XML文档 set xmlDoc = Server.CreateObject(Microsoft.XMLDOM) set root = xmlDoc.createNode("element","联系人列表","") xmlDoc.appendChild(root)’查询数据库 sqlStr = "select * from clientList" set cConn = Server.CreateObject("ADODB.Connection") cConn.Open "CLIENTS","sa", "" set rsData = cConn.Execute(sqlStr) rsData.MoveFirst()while (not rsData.EOF ) ’构建联系人子节点 set tmpNode = xmlDoc.createNode("element","联系人","") xmlDoc.documentElement.appendChild(tmpNode) ’构建姓名、ID、公司、Email子节点 for I = 0 to rsData.Fields.Count - 1 set childNode = xmlDoc.createNode("element",rsData.Fields(i).Name,"") childNode.text = rsData.Fields(i) tmpNode.appendChild(childNode) next rsData.MoveNext() wendResponse.Write(xmlDoc.xml)%
DTD:
% Response.ContentType="text/xml" %?xml version="1.0" encoding="GB2312" ?联系人列表% Set cConn = Server.CreateObject("ADODB.Connection") cConn.Open "CLIENTS","sa", "" Set rsData = cConn.Execute("select * from clientList") do while not rsData.Eof%联系人 姓名%=rsData("Name")%/姓名 ID%=rsData("ID")%/ID 公司%=rsData("Company")%/公司 Email%=rsData("Email")%/Email/联系人% rsData.MoveNext Loop rsData.Close Set rsData = nothing%/联系人列表(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
最终生成XML文档为:
?xml version = "1.0" encoding="GB2312" standalone = "no"?联系人列表 联系人 姓名张三/姓名 ID1/ID 公司A公司/公司 EMAILzhang@aaa.com/EMAIL /联系人联系人 姓名李四/姓名 ID2/ID 公司B公司/公司 EMAILli@bbb.org/EMAIL /联系人/联系人列表
44、这种方案存在一个前提,那就是,开发者必须了解文档结构,并且通过编程严格控制输出文档的格式。但细心的读者可能会产生疑问:既然数据已经存储在数据库中,又何必大费周折重新定义一遍文档结构呢?
XML的自描述性何在?为了解决这个问题,微软将其ADO技术进行了扩展以提供对XML的更大支持,结果是可以根据数据库表的内在结构直接输出XML文档,文档的格式将符合默认的DTD定义。下面是一个用Visual Basic 6.0编写的实例:
’声明连接和结果集Dim cConn As ADODB.ConnectionDim rsData As ADODB.Recordset Private Sub Form_Load() ’连接数据库 Dim query As String Set cConn = New ADODB.Connection cConn.ConnectionString = "DSN=nwind;UID=sa;PWD=;" cConn.Open’执行数据库查询 query = "Select * FROM clientList" Set rsData = cConn.Execute(query)’将数据库返回结果集保存至文件 On Error Resume Next Kill ("recordset.xml") rsData.Save "output.xml", adPersistXMLEnd Sub
下面给出的是该程序执行后生成的XML文档--output.xml。通过分析,可以发现,它实际上是一个内嵌XML Schema的XML实例文档。该实例文档的主元素是rs:data,命名空间rs由xmlns:rs=’urn:schemas-microsoft-com:rowset’定义;数据库查询返回的每一条记录都作为rs:data的一个子元素,用z:row表示。
z:row子元素实际上是空元素,信息均以属性的方式体现,属性来自于返回的数据库字段。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)内嵌的Schema部分s:Schema id=’RowsetSchema’定义了元素row的组织结构和规则。
xml xmlns:s=’uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882’ xmlns:dt=’uuid:C2F41010-65B3-11d1-A29F-00AA00C14882’ xmlns:rs=’urn:schemas-microsoft-com:rowset’ xmlns:z=’#RowsetSchema’ s:Schema id=’RowsetSchema’ s:ElementType name=’row’ content=’eltOnly’ s:attribute type=’Name’/ s:attribute type=’ID’/ s:attribute type=’Company’/ s:attribute type=’Email’/ s:extends type=’rs:rowbase’/ /s:ElementTypes:AttributeType name=’Name’ rs:number=’1’ rs:nullable=’true’ rs:write=’true’ s:datatype dt:type=’string’ dt:maxLength=’10’/ /s:AttributeTypes:AttributeType name=’ID’ rs:number=’2’ rs:nullable=’true’ rs:write=’true’ s:datatype dt:type=’int’/ /s:AttributeTypes:AttributeType name=’Company’ rs:number=’3’ rs:nullable=’true’ rs:write=’true’ s:datatype dt:type=’string’ dt:maxLength=’20’/ /s:AttributeTypes:AttributeType name=’Email’ rs:number=’4’ rs:nullable=’true’ rs:write=’true’ s:datatype dt:type=’string’ dt:maxLength=’20’/ /s:AttributeType/s:Schemars:data z:row Name=’张三’ ID=’1’ Company=’A公司’ Email=’zhang@aaa.com’/ z:row Name=’李四’ ID=’2’ Company=’B公司’ Email=’li@bbb.org’//rs:data/xml
ADO提供了文档保存功能,通过它,ASP可以将数据库返回结果集保存至XML文件,这些XML文件经由XSL样式化后可以在浏览器直接显示,也可以传输至其他应用系统供再次利用。
另外,值得一提的是,微软在其ADO2.5和IIS5.0中又增加了更高级的支持,即,可以将数据库返回的结果直接转换为XML在浏览器中显示,而不必先保存至文件。下面的实例片段有力地说明了这一点:
% Set rsData = Server.CreateObject("ADODB.Recordset") Response.ContentType="text/xml" rsData.Open "select * from clientList", "File Name=" & Server.MapPath("ado.udl") rsData.Save Response, adPersistXML rsData.Close Set cConn = nothing%
(完)