intTypePromotion=3

Chuyển đổi dữ liệu quan hệ sang dữ liệu XML

Chia sẻ: Nguyen Van Tuan | Ngày: | Loại File: DOC | Số trang:6

0
123
lượt xem
16
download

Chuyển đổi dữ liệu quan hệ sang dữ liệu XML

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tài liệu Chuyển đổi dữ liệu quan hệ sang dữ liệu XML giới thiệu về XML, tổng quan về ADO.NET, các phương pháp chuyển đổi dữ liệu quan hệ sang dữ liệu XML, tổng quan về các phương pháp, sử dụng đối tượng Command, sử dụng đối tượng DataSet, sử dụng CSDL MySQL.

Chủ đề:
Lưu

Nội dung Text: Chuyển đổi dữ liệu quan hệ sang dữ liệu XML

  1. Chuyển đổi dữ liệu quan hệ sang dữ liệu XML Tác giả: Ngô Đình Thưởng, Khoa Tin học, Trường ĐHSP Đà Nẵng I. Giới thiệu XML là từ viết tắt của eXtensible Markup Language, XML được Jon Bosakv (Sun MicroSystems) xây dựng từ năm 1998. XML được sử dụng để lưu trữ dữ liệu và nhất là vận chuyển dữ liệu giữa các ứng dụng trong môi trường desktop hay internet. - XML được sử dụng để lưu trữ dữ liệu, nhưng không thay thế CSDL quan hệ mà đ ược s ử dụng cho nhu cầu nhất định bởi đặc tính của nó là m ột file văn b ản, không ph ụ thu ộc vào platform. Trong sơ đồ tiến hóa của các hệ cơ sở dữ liệu ( hình 1), XML là nền tảng cho các hệ cơ sở dữ liệu noSQL, hệ cơ sở dữ liệu web. Hiện nay, bộ môn Khai phá dữ liệu web đang được nghiên cứu và giảng dạy trong chương trình đào tạo CNTT. Hình 1: Sơ đồ tiến hóa của các hệ cơ sở dữ liệu [1] - XML được sử dụng để trao đổi thông tin giữa các module trong m ột ứng d ụng nh ư Windows, SQL Server, Apache… và còn được sử dụng để vận chuyển d ữ li ệu nh ư ứng d ụng SOAP, Webservice… - Hiện nay, một khối lượng lớn dữ liệu được lưu trữ trong các hệ CSDL quan hệ, vấn đề là làm sao chuyển đổi kho dữ liệu này thành dạng dữ liệu XML. Trong bài viết này, chúng tôi mô tả các kỹ thuật để chuyển đổi d ữ li ệu trong các hệ cơ sở dữ liệu thông dụng như SQL Server, Access 2003 và MySQL sang tệp dữ liệu XML với ADO.NET. II. Tổng quan về ADO.NET II.1- Phương pháp cổ điển Phương pháp cổ điển được sử dụng cho ngôn ngữ VB, VBScript d ựa vào giao di ện ADO, hay PHP dựa vào đối tượng recordset để trích xuất dữ liệu ra thành một stream XML, sau đó l ưu vào tệp XML. Sau đây các tóm tắt ví dụ cho bảng SV(Masv,Hoten, DiaChi,Lop): • Với VBScript & ADO 3.0 path = "C:\sv.xml" Dim xmlDoc Set xmlDoc=Server.CreateObject("Microsoft.XMLDOM") ‘ trích xuất dữ liệu vào đối tượng recordset rs str="" Do Until Rs.EOF str=str & "" & Rs("HoTen") & "" str=str & "" & Rs("DiaChi") & "" ' Có thể bổ sung các thẻ khác để lưu địa chỉ, lớp... Rs.MoveNext Loop str=str & "" xmlDoc.LoadXML(str) xmlDoc.Save(path) 1
  2. Ghi chú: trong môi trường Net Framework, ta có hàng loạt các lớp xử lý XML, nhưng quan trọng nhất là lớp XmlDocument nằm trong name space System.Xml • Với PHP và MySQL // giả sử dữ liệu được truy vấn và lưu trong đối tượng recordset $rs $xml_output = "\n"; $xml_output .= "\n"; while($row = mysql_fetch_array($rs)){ $xml_output .= "\t\n"; $xml_output .= "\t\t".$row['Hoten']."\n"; $xml_output .= "\t\t".$row['Diachi']."\n"; $xml_output .= "\t\n"; } $xml_output .= ""; $fp=fopen("C:\sv.xml","w"); fwrite($fp,$xml_output); fclose($fp); II.2- Tổng quan về ADO.NET Nhằm khắc phục những hạn chế của mô hình ADO, Microsoft xây d ựng ADO.NET chạy trên nền Net Framework, nó được xem như là m ột giao di ện l ập trình c ơ s ở d ữ li ệu cho các ứng dụng dựa trên Net Framework, đặc biệt đưa ra các kỹ thuật kết xu ất d ữ li ệu quan h ệ thành d ữ liệu XML với các phương pháp phong phú. Mô hình ki ến trúc ADO.NET đ ược minh h ọa nh ư sau: Nguồn: http://www.codeproject.com ( có hiệu chỉnh) + Data Provider bao gồm các lớp: Connection, Command, DataAdapter và DataReader Lớp Connection thiết lập kết nối với dữ liệu nguồn và là một tham chiếu kết n ối trong các lớp Command và DataAdapter. Có 3 phiên bản của lớp Connection: - SqlConnection dành cho hệ cơ sở dữ liệu SQL Server - OleDbConnection dành cho các hệ cơ sở dữ liệu khác - OdbcConnection để thực hiện kết nối thông qua ODBC (Open Database Connectivity), trong 3 phiên bản trên đáng chú ý nhất là SqlConnection và OledbConnection. T ương ứng v ới phiên b ản Connection ta có các lớp Command, DataAdapter và DataReader phù hợp. Các lớp trên n ằm trong name sapce System.Data.SqlClient Lớp Command có trách nhiệm thực thi các câu lệnh SQL hay các Stored Procedure Đối tượng DataAdapter là cầu nối giữa đối tượng Connection và đối tượng DataSet. ADO.NET đưa ra 3 phiên bản khác nhau về đối tượng DataAdapter: dùng cho SQL Server, dùng cho OLEDB với các cơ sở dữ liệu quan hệ khác nhau và ODBC Data Provider. Điều quan trọng nhất khi sử dụng OLEDB là phải xác định connection string đến từng loại cơ sở dữ liệu. Thông tin cụ thể được trình bày tại website www.connectionstrings.com. Đối tượng DataReader và một thay thế cho đối tượng DataSet, nhưng chỉ cho phép đọc dữ li ệu theo chiều tiến về phía trước mà thôi. 2
  3. + Đối tượng DataSet sử dụng XML để lưu trữ dữ liệu trong cache và vận chuyển dữ li ệu gi ữa các ứng dụng và Data Provider, điều khác biệt với ADO 3.0, đối tượng DataSet ch ứa nhi ều đ ối tượng DataTable. Đối tượng DataSet là thành phần chính của ADO.NET. III. Các phương pháp chuyển đổi dữ liệu quan hệ sang dữ liệu XML III.1. Tổng quan về các phương pháp Cốt lõi của phương pháp là chuyển đổi dữ liệu lưu trong DataSet hay dữ liệu trả về của phương thức ExecuteScalar thành một Stream XML. - Với đối tượng StreamWriter lấy dữ liệu trong DataSet. Tables(0).Rows(0).Item(0) và lưu thành tệp XML. Sở dĩ chọn chỉ số 0 của các đối tượng vì câu lệnh Select … for XML trả về một bảng chỉ có một dòng, một cột. - Với đối tượng DataSet thì bản thân nó chứa dữ liệu dưới dạng XML, ph ương th ức getXML() lấy thông tin trong DataSet và cho lại một Stream XML. Lúc này xử d ụng các ph ương th ức c ủa lớp XmlDocument để nạp vào cây XML và lưu thành tệp XML. Sau đây là các ví dụ: III.2. Sử dụng đối tượng Command Thế mạnh của đối tượng Command là nó cho phép thực thi câu l ệnh SQL, trong đó câu l ệnh Select ... for XML cho phép kết xuất kết quả ra một XML Stream. Tùy theo nhu cầu cụ thể, ta sử dụng câu lệnh này với các nhiệm ý phù hợp. Cú pháp : Select ... from ... for XML auto | raw | explicit [,xmldata | , elements] Giả sử ta có cơ sở dữ liệu SQL Server QLSV trong đó có bảng SV(Maso, Hoten, Lop).  Select * from SV for XML auto cho kết quả:  Select * from SV for XML auto, elements cho kết quả: 01Võ Văn Quân08SPT 02Nguyễn Tiệp08CNTT1  Select * from SV for XML raw cho kết quả:  Select * from SV for XML raw, elements cho kết quả: 01Võ Văn Quân08SPT 02Nguyễn Tiệp08CNTT1 Các phương pháp trên cho lại một XML Stream nhưng thi ếu chỉ thị xử lý và nút gốc của cây XML và ta phải bổ sụng trước khi lưu tệp XML. Ví dụ: Imports System.Xml Imports System.Data.SqlClient 3
  4. Module Module1 Dim xmlDoc As New XmlDocument Sub Main() Dim objConn As New SqlConnection("Data _ Source=NDT\SqlExpress;Database=QLSV;Integrated Security=SSPI;") objConn.Open() Dim objCmd As New SqlCommand("select * from SV for xml auto,_ elements",_ objConn) Dim strXML As String = objCmd.ExecuteScalar.ToString strXML="" strXML &= "" & strXML & "" xmlDoc.LoadXml(strXML) xmlDoc.Save("D:\UED.XML") End Sub End Module Trong môi trường VB 6.0 hay VbScript ta cũng có thể thực hiện vi ệc chuyển đ ổi nh ư trên, nhưng mã nguồn dài hơn khá nhiều. III.3. Sử dụng đối tượng DataSet Giả sử rằng cơ sở dữ liệu QLSV được đặt trên máy NDT\SQLExpress và đ ược phân quy ền Select cho user có tên “TH” và mật khẩu ”1234”, a- Dùng phương thức WriteXML của đối tượng DataSet Imports System.Xml Imports System.Data.SqlClient …. Dim strCon As String = "Data Source=NDT\SQLExpress;Initial Catalog=SV;_ User ID=TH;Password=1234; Trusted_Connection=Yes" Dim connection As New SqlConnection(strCon) Dim adapter As New SqlDataAdapter Dim ds As New DataSet Dim strSql As String strSql = "Select * from SV" Try connection.Open() adapter = New SqlDataAdapter(strSql, strCon) adapter.Fill(ds) connection.Close() ds.WriteXml("D:\UED.XML") MsgBox("Done!") Catch ex As Exception MsgBox(ex.ToString) End Try b- Dùng đối tượng StreamWriter Imports System.Xml Imports System.Data.SqlClient Imports System.IO … Dim connection As SqlConnection Dim adapter As SqlDataAdapter Dim ds As New DataSet Dim sql As String Dim strXML As String Dim SqlCon As String = "Data Source=NDT\SQLExpress;Initial Catalog=SV;_ User ID=TH;Password=1234; Trusted_Connection=Yes" connection = New SqlConnection(SqlCon) sql = "select * from SV for xml auto" Try 4
  5. connection.Open() adapter = New SqlDataAdapter(sql, SqlCon1) adapter.Fill(ds) connection.Close() strXML = "" strXML &= "" & ds.Tables(0).Rows(0).Item(0) & "" Using writer As StreamWriter = New StreamWriter("D:\UED.xml") writer.Write(strXML) End Using MsgBox("Done") Catch ex As Exception MsgBox(ex.ToString) End Try c- Dùng phương thức getXML của đối tượng DataSet Ví dụ sau đây dùng cơ sở dữ liệu MS Access 2003 để minh họa cho cách sử dụng OLEDB Imports System.Xml Imports System.Data.SqlClient … Dim strSQL As String = "Select * from SV" Dim path As String = "D\QLSV.MDB" Dim objDataSet As New DataSet Dim objCon As OleDbConnection Dim strCon As String Dim xmlDoc As New XmlDocument strCon = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & path objCon = New OleDbConnection(strCon) Dim objAdapter As New OleDbDataAdapter(strSQL, objCon) objAdapter.Fill(objDataSet) objCon.Close() xmlDoc.LoadXml(objDataSet.GetXml()) xmlDoc.Save("D:\UED.XML") MsgBox("Export completed!") III.4. Sử dụng CSDL MySQL Việc chuyển đổi dữ liệu MySQL thành dữ liệu XML với PHP đã nêu trên, tuy nhiên trong môi trường Net Framework cần tiến hành một số cài đặt bổ sung: Tải phần mềm mysql-connector-net.exe tại địa chỉ: (chọn phiên bản phù hợp): http://dev.mysql.com/downloads/connector/net/1.0.html Khi tham chiếu name space, thực thi các phương thức, sử dụng các thu ộc tính chú ý đ ến ti ền t ố MySQL thay vì SQL. Sau đây là một ví dụ: Imports MySql.Data.MySqlClient Imports System.IO Dim myCommand As New MySqlCommand Dim myAdapter As New MySqlDataAdapter Dim myData As New DataSet Dim table As String = "SV" Dim strSQL As String = "Select * from SV" Dim conn = New MySqlConnection() conn.ConnectionString = "server=localhost; user id=root; password='';_ database=qlsv" Try conn.Open() Try 5
  6. myCommand.Connection = conn myCommand.CommandText = strSQL myAdapter.SelectCommand = myCommand myAdapter.Fill(myData, table) myData.WriteXml("C:\ued.xml") MsgBox("Done!") Catch myerror As MySqlException MsgBox("There was an error reading from the database" _ & myerror.message ) End Try Catch myerror As MySqlException MessageBox.Show("Error connecting to the database") Finally If conn.State ConnectionState.Closed Then conn.Close() End Try IV. Tài liệu tham khảo [1] Hà Quang Thụy (chủ biên), Giáo trình Khai phá dữ liệu Web, nxb Giáo dục, Hà Nội, 2009 [2] Hiroshi Maruyama và cộng sự, XML and Java, Developing Web Application, nxb Addison Wesley, 2002 [3] Dương Quang Thiện, Lập trình web, tập 5, nxb Tổng hợp TP. HCM, 2005 [4] Phạm Hữu Khang, Lập trình ASP.NET 2.0, quyển 4, nxb Lao động-Xã hội, Hà Nội, 2007 [5] Nguyễn Tiến Huy, Giáo trình Công nghệ XML và Ứng dụng, download từ địa chỉ : http://www.ebook.edu.vn/?page=1.39&view=11061 6

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản