1. Trang chủ
  2. » Công Nghệ Thông Tin

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

6 411 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 238,5 KB

Nội dung

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ế CS

Trang 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="<?xml version=’1.0’?><UED>"

Do Until Rs.EOF

str=str & "<SinhVien><HoTen>" & Rs("HoTen") & "</HoTen>"

str=str & "<DiaChi>" & Rs("DiaChi") & "</DiaChi></SinhVien>"

' Có thể bổ sung các thẻ khác để lưu địa chỉ, lớp

Rs.MoveNext

Loop

str=str & "</UED>"

xmlDoc.LoadXML(str)

xmlDoc.Save(path)

Trang 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 = "<?xml version=\"1.0\"?>\n";

$xml_output = "<UED>\n";

while($row = mysql_fetch_array($rs)){

$xml_output = "\t<SV>\n";

$xml_output = "\t\t<HoTen>".$row['Hoten']."</Hoten>\n";

$xml_output = "\t\t<Diachi>".$row['Diachi']."</Diachi>\n";

$xml_output = "\t</SV>\n";

}

$xml_output = "</UED>";

$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

Trang 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ả:

<SV Maso=”01” Hoten=”Võ Văn Quân” Lop=”08SPT”/>

<SV Maso=”02” Hoten=”Nguyễn Tiệp” Lop=”08CNTT1”/>

 Select * from SV for XML auto, elements cho kết quả:

<SV><Maso>01</Maso><Hoten>Võ Văn Quân</Hoten><Lop>08SPT</Lop></SV>

<SV><Maso>02</Maso><Hoten>Nguyễn Tiệp</Hoten><Lop>08CNTT1</Lop></SV>

 Select * from SV for XML raw cho kết quả:

<row Maso=”01” Hoten=”Võ Văn Quân” Lop=”08SPT”/>

<row Maso=”02” Hoten=”Nguyễn Tiệp” Lop=”08CNTT01”/>

 Select * from SV for XML raw, elements cho kết quả:

<row><Maso>01</Maso><Hoten>Võ Văn Quân</Hoten><Lop>08SPT</Lop></raw>

<row><Maso>02</Maso><Hoten>Nguyễn Tiệp</Hoten><Lop>08CNTT1</Lop></raw>

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

Trang 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="<?xml version=’1.0’?>"

strXML &= "<UED>" & strXML & "</UED>"

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

Trang 5

adapter = New SqlDataAdapter(sql, SqlCon1)

adapter.Fill(ds)

connection.Close()

strXML = "<?xml version=’1.0’?>"

strXML &= "<UED>" & ds.Tables(0).Rows(0).Item(0) & "</UED>"

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

Trang 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

Ngày đăng: 04/12/2015, 03:32

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w