DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> XML初學進階學習筆記(6)
XML初學進階學習筆記(6)
編輯:XML詳解     

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()
  wend
Response.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
%>
</聯系人列表>

  最終生成XML文檔為:

  <?XML version = "1.0" encoding="GB2312" standalone = "no"?>
<聯系人列表>
   <聯系人>
     <姓名>張三</姓名>
     <ID>1</ID>
     <公司>A公司</公司>
     <EMAIL>[email protected]</EMAIL>
   </聯系人>
<聯系人>
     <姓名>李四</姓名>
     <ID>2</ID>
     <公司>B公司</公司>
     <EMAIL>[email protected]</EMAIL>
   </聯系人>
</聯系人列表>


44、這種方案存在一個前提,那就是,開發者必須了解文檔結構,並且通過編程嚴格控制輸出文檔的格式。但細心的讀者可能會產生疑問:既然數據已經存儲在數據庫中,又何必大費周折重新定義一遍文檔結構呢?

  XML的自描述性何在?為了解決這個問題,微軟將其ADO技術進行了擴展以提供對XML的更大支持,
結果是可以根據數據庫表的內在結構直接輸出XML文檔,文檔的格式將符合默認的DTD定義。下面是一個用Visual Basic 6.0編寫的實例:

  ’聲明連接和結果集
Dim cConn As ADODB.Connection
Dim 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", adPersistXML
End Sub

  下面給出的是該程序執行後生成的XML文檔--output.xml。通過分析,可以發現,它實際上是一個內嵌XML Schema的XML實例文檔。該實例文檔的主元素是<rs:data>, 命名空間rs由XMLns:rs=’urn:schemas-microsoft-com:rowset’定義; 數據庫查詢返回的每一條記錄都作為<rs:data>的一個子元素,用<z:row>表示。

<z:row>子元素實際上是空元素,信息均以屬性的方式體現,屬性來自於返回的數據庫字段。

  內嵌的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:ElementType>
<s:AttributeType name=’Name’ rs:number=’1’ rs:nullable=’true’     rs:write=’true’>
   <s:datatype dt:type=’string’ dt:maxLength=’10’/>
  </s:AttributeType>
<s:AttributeType name=’ID’ rs:number=’2’ rs:nullable=’true’ rs:write=’true’>
   <s:datatype dt:type=’int’/>
  </s:AttributeType>
<s:AttributeType name=’Company’ rs:number=’3’ rs:nullable=’true’ rs:write=’true’>
   <s:datatype dt:type=’string’ dt:maxLength=’20’/>
  </s:AttributeType>
<s:AttributeType name=’Email’ rs:number=’4’ rs:nullable=’true’ rs:write=’true’>
   <s:datatype dt:type=’string’ dt:maxLength=’20’/>
  </s:AttributeType>
</s:Schema>
<rs:data>
  <z:row Name=’張三’ ID=’1’ Company=’A公司’ Email=’[email protected]’/>
  <z:row Name=’李四’ ID=’2’ Company=’B公司’ Email=’[email protected]’/>
</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
%>

  (完)



XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved