4. Tổng quan luận văn
2.3. Chuyển một tài liệu XML sang một CSDL quan hệ
Để chuyển một tài liệu XML sang một CSDL quan hệ trên cơ sở thỏa mãn một số ràng buộc nhất định, chúng ta sử dụng mô hình đối tượng tài liệu DOM.
Một tài liệu XML được tổ chức theo mô hình DOM có dạng (Hình 2.9):
Hình 2.9: Tài liệu XML được thể hiện theo mô hình DOM
Thông qua các phương thức xử lý các đối tượng trong tài liệu XML mà mô hình cung cấp, ta truy cập đến từng đối tượng trong tài liệu cũng như nội dung và thuộc tính của các đối tượng.
Mô hình DOM tổ chức một tài liệu XML dưới dạng hình cây nên trong quá trình truy cập tới mỗi đối tượng, ta sẽ lưu giữ được cấu trúc của mỗi đối tượng. Việc chuyển một tài liệu XML sang một CSDL quan hệ thực chất là việc tổ chức các đối tượng trong tài liệu XML thành các nhóm đối tượng thỏa mãn một số ràng buộc nào đó, và mỗi nhóm này sẽ tương ứng với một lược đồ CSDL. Căn cứ vào các lược đồ CSDL ta đưa ra các CSDL phù hợp dưới dạng các bảng rồi chuyển thành CSDL quan hệ được thể hiện qua sơ đồ sau (Hình 2.10).
Hình 2. 10: Sơ đồ chuyển tài liệu XML thành CSDL quan hệ
Để chuyển một tài liệu XML sang một CSDL quan hệ, ta sử dụng 2 phương pháp sau:
2.3.1. Phƣơng pháp ánh xạ một tài liệu XML thành CSDL quan hệ
Ánh xạ một tài liệu XML sang một CSDL quan hệ được thực hiện thông qua việc ánh xạ trực tiếp các phần tử thành các thuộc tính dựa trên một số quy tắc ánh xạ [15] sau (Hình 2.11):
ET_R: một kiểu phần tử (ET) của tài liệu XML được ánh xạ thành một quan hệ R.
ET_A: một kiểu phần tử (ET) của tài liệu XML được ánh xạ thành một thuộc tính A của quan hệ.
A_A: một thuộc tính của tài liệu XML được ánh xạ thành một thuộc tính của quan hệ.
Hình 2. 11: Những ánh xạ cơ bản từ tài liệu XML thành CSDL quan hệ
Ví dụ 2.4: Ánh xạ tài liệu XML thành CSDL quan hệ (Hình 2.12): DOCGIA Madg B001 B002 <Madg> B001 </Madg> <TenDG> Lê Thị Ánh </Tendg> <Gioitinh> Nữ </Gioitinh> <Namsinh> 1992 </Namsinh> Ten DG Lê Thị Ánh Nguyễn Thị Đào Gioi tinh Nữ Nữ Nam sinh 1992 1992
Diachi Thái Bình Nam Định <Diachi> Thái Bình </Diachi> <Nghenghiep> Sinh viên </Nghenghiep> <Khoa> Kinh tế </Khoa> <Lop> CĐ51KT1 </Lop> <Dienthoai> 0123660672 </Dienthoai> Nghe
nghiep Sinh viên Sinh viên
Khoa Kinh tế Kinh tế Lop CĐ51KT1 CĐ51KT9 Dien thoai 0123660672 0914306796
Hình 2. 12: Ánh xạ một tài liệu XML thành một CSDL quan hệ
Ví dụ 2.5: Chuyển từ tài liệu XML thành bảng CSDL quan hệ
DOCGIA MaDg Tendg Gioitinh Namsinh
B001 Lê Thị Ánh Nữ 1992
<DOCGIA MADG= “B001”>
<TenDG> Lê Thị Ánh</TenDG> <Namsinh>1992</Namsinh> <Gioitinh>Nữ</Gioitinh> </DOCGIA> ET_R Bước 1 Bước 2 ET_A ET_A ET_A ET_A
2.3.2. Phƣơng pháp băm nhỏ hay phân tách các tài liệu XML
Chuyển đổi các tài liệu XML thành các hàng trong các bảng dữ liệu quan hệ hay được biết đến như việc băm nhỏ hay phân tách các tài liệu XML. Một trong những lý do chính cho việc băm nhỏ là các ứng dụng SQL đang tồn tại vẫn cần truy cập vào dữ liệu dưới định dạng quan hệ. Chính vì vậy đôi khi ta sẽ thấy khá hữu dụng trong việc băm nhỏ tất cả hoặc một số giá trị dữ liệu của một tài liệu XML được chỉ định vào các cột và các hàng nằm trong các bảng dữ liệu quan hệ.
Để thực hiện phương pháp này ta lần lượt nghiên cứu các vấn đề sau:
Những ưu điểm và nhược điểm của việc băm nhỏ
Cách băm nhỏ dữ liệu XML thành các bảng quan hệ bằng lệnh INSERT có chứa hàm XMLTABLE.
* Ưu điểm và nhược điểm của việc băm nhỏ
Bảng 2.6 tóm tắt các ưu điểm và nhược điểm của việc băm nhỏ (shred) dữ liệu XML thành các bảng quan hệ.
Bảng 2.6: Khi việc băm nhỏ là có hay không là một lựa chọn thích hợp
Là lựa chọn thích hợp khi… Là lựa chọn không thích hợp khi…
- Dữ liệu XML được chỉ định đang cung cấp cho một cơ sở dữ liệu quan hệ đang tồn tại.
- Dữ liệu XML của bạn phức tạp, xếp chồng và khó cho việc bản đồ hóa thành một giản đồ quan hệ.
- Các tài liệu XML không thể hiện được các đối tượng logic doanh nghiệp cần được duy trì.
- Việc bản đồ hóa định dạng XML của bạn thành giản đồ quan hệ dẫn đến một số lượng lớn các bảng.
- Mục đích chính của bạn là cho phép các ứng dụng quan hệ đang tồn tại có thể truy cập vào dữ liệu XML
- XML Schema của bạn hay thay đổi
- Bạn ưng thuận với giản đồ quan hệ của mình và thích sử dụng nó nếu có thể.
- Mục tiêu của bạn là quản lý các tài liệu XML như các đối tượng doanh nghiệp nguyên vẹn.
- Cấu trúc của dữ liệu XML của bạn dễ dàng được bản đồ hóa thành các bảng dữ liệu quan hệ.
- Bạn thường cần xây dựng lại các tài liệu được băm nhỏ hoặc một phần trong chúng.
- Định dạng XML của bạn tương đối ổn định và ít thay đổi.
- Sử dụng dữ liệu XML trong một cơ sở dữ liệu với tốc độ cao cho ứng dụng của bạn.
- Bạn ít khi cần xây dựng lại các tài liệu được băm nhỏ.
- Việc truy vấn hoặc nâng cấp dữ liệu với SQL quan trọng hơn chèn.
* Cách băm nhỏ dữ liệu XML thành các bảng quan hệ bằng lệnh INSERT có chứa hàm XMLTABLE.
Các câu lệnh INSERT của SQL sử dụng hàm XMLTABLE. Hàm này sẽ điều hướng vào một tài liệu đầu vào và sinh ra một hoặc nhiều hàng quan hệ dùng để chèn vào bảng quan hệ.
2.4. Thuật toán chuyển đổi giữa cơ sở dữ liệu quan hệ và XML
Dựa vào phương pháp luận chuyển đổi các cơ sở dữ liệu quan hệ và XML, thuật toán chuyển đổi giữa các cơ sở dữ liệu quan hệ và XML được xây dựng theo mô hình tổng quát sau (Hình 2.14):
Hình 2.14: Mô hình XML ở dạng bảng và dạng cây
Để xây dựng thuật toán chuyển đổi CSDL quan hệ và XML ta thực hiện theo các bước sau:
Bƣớc 1: Biểu diễn tài liệu XML theo mô hình DOM
Bƣớc 2: Biểu diễn tài liệu XML theo dạng bảng của CSDL quan hệ và chuyển thành CSDL quan hệ
2.4.1. Biểu diễn tài liệu XML theo mô hình DOM
Một cây được tạo bởi từ nhiều nút, mỗi nút lại là một cây chứa những nút khác. Nút lá thì không có con, vì thế nút này được dùng để hiển thị văn bản.
Lớp XmlDataDocument kế thừa lớp XmlDocument vì thế nó cũng có một số phương thức giống lớp XmlDocument.
Với mô hình DOM, một tài liệu XML được tổ chức dưới dạng một sơ đồ hình cây có cấu trúc tương tự như một cây thư mục trong Windows. Vì vậy mục đích chính của phần này là biểu diễn tài liệu XML theo mô hình DOM như minh họa sau (Hình 2.15):
Hình 2.15: Biểu diễn tài liệu XML theo mô hình DOM
* Thuật toán 2.1
+ Dữ liệu vào: Tập tài liệu XML
+ Dữ liệu ra: Tài liệu XML theo mô hình DOM
Tài liệu XML được đọc thông qua hình thức đọc một tập tin dữ liệu và được xây dựng theo dạng mô hình DOM [15] qua các bước sau:
Bƣớc 1: Truy cập và lấy phần tử gốc của tài liệu.
Bƣớc 2: Lấy danh sách tất cả các phần tử con của phần tử gốc.
Bƣớc 3: Mỗi phần tử con tìm được sẽ được gán một nhãn đặc trưng.
Bƣớc 4: Tìm các phần tử con được thực hiện theo phương pháp đệ quy.
Bƣớc 6: Xây dựng và lưu trữ đường dẫn tương ứng tới mỗi phần tử con trong tài liệu XML.
Bƣớc 7: Lấy tên các phần tử con và các giá trị thuộc tính của nó.
Bƣớc 8: Chuyển đổi thông tin về đường dẫn, nội dung của các phần tử sang dạng chuỗi để in ra màn hình dưới dạng một cây tài liệu. [12] [13]
+ Độ phức tạp thuật toán: Sử dụng phương pháp đệ quy để gán nhãn, sau đó chuyển thông tin về đường dẫn để in ra dưới dạng cây tài liệu. Độ phức tạp của thuật toán là O(n2)
2.4.2. Biểu diễn tài liệu XML theo dạng bảng của CSDL quan hệ
Như đã trình bày ở trên, tài liệu XML là một cây (theo mô hình DOM) bao gồm các nút (node). Những nút này nội dung có thể chứa phần tử (element), dữ liệu (text), các thuộc tính (attribute),… và các nút con khác. Hình sau minh họa việc biểu diễn tài liệu XML theo dạng bảng (Hình 2.16):
Hình 2.16: Biểu diễn tài liệu XML theo dạng bảng
Để chuyển một tài liệu XML dưới dạng cây sang dạng bảng ta sử dụng thuật toán sau:
* Thuật toán 2.2
+ Dữ liệu vào: Tập tài liệu XML
+ Dữ liệu ra: Bảng cơ sở dữ liệu quan hệ
Bƣớc 1: Duyệt qua tất cả các nút của cây theo mô hình DOM, bắt đầu từ nút gốc theo phương pháp đệ quy.
Bƣớc 2: Xây dựng một hàm để kiểm tra và xử lý nút của cây tài liệu DOM. Đối với mỗi nút hiện hành mà có nút con thì hàm đệ quy tìm sâu xuống các nút bên dưới và hình thành một DOM tương ứng cho nút.
Bƣớc 3: Với mô hình DOM thu được, thực hiện một ánh xạ các phần tử, các thuộc tính với giá trị tương ứng thành các quan hệ, thuộc tính và giá trị tương ứng của bảng CSDL quan hệ. [12] [13]
+ Độ phức tạp thuật toán: Do thực hiện 2 công việc là duyệt cây và tìm kiếm trên cây, sau đó thực hiện 1 ánh xạ sang CSDL quan hệ. Độ phức tạp của thuật toán là O(n2)
2.4.3. Chuyển một CSDL quan hệ sang một tài liệu XML
Để chuyển một CSDL quan hệ thành một tài liệu XML, ta thực hiện tạo nguồn dữ liệu ODBC từ các CSDL quan hệ đã phi chuẩn, sau đó thực hiện thuật toán sau:
* Thuật toán 2.3
+ Dữ liệu vào: Các bảng CSDL quan hệ đã được kết nối
+ Dữ liệu ra: Tài liệu XML tương ứng với từng bảng
Bƣớc 1: Xây dựng lớp kết nối với ODBC để kết nối dữ liệu được xây dựng trong môi trường Microsoft Access, MySQL hay Microsoft SQL Server.
Bƣớc 2: Tạo các kết nối trên các CSDL quan hệ cần chuyển đổi thành tài liệu XML thông qua các truy vấn SQL.
Bƣớc 3: Chuyển đổi dữ liệu đã kết nối sang tài liệu XML thông qua các nguyên tắc ánh xạ đã trình bày. [12] [13]
+ Độ phức tạp thuật toán: Do có 2 thao tác là cập nhật CSDL sau đó chuyển và ánh xạ sang tài liệu XML, thuật toán có độ phức tạp là O(n2).
2.5. Cài đặt thuật toán
Thuật toán được cài đặt bằng ngôn ngữ lập trình C#. Các CSDL quan hệ được sử dụng trong chương trình được tạo lập từ môi trường CSDL Microsoft Access hay Microsoft SQL Server. Các tài liệu XML có thể được tạo lập trong môi trường EditPlus, WordPad, NotePad, XML Editor,…
2.5.1. Đọc tài liệu XML dƣới dạng DOM
Một tài liệu XML được đọc vào chương trình được hiển thị dưới dạng một cấu trúc hình cây.
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Server.MapPath("Docgia.xml")); TreeView1.Nodes.Clear();
TreeView1.Nodes.Add(new
TreeNode(xmlDoc.DocumentElement.Name)); TreeNode tNode = new TreeNode();
tNode = TreeView1.Nodes[0]; AddNode(xmlDoc.DocumentElement, tNode); TreeView1.ExpandAll(); XmlNode xNode; TreeNode tNode; XmlNodeList xNodeList; int i; if (xmlNode.HasChildNodes) { xNodeList = xmlNode.ChildNodes;
for (i = 0; i <= xNodeList.Count - 1; i++) { xNode = xmlNode.ChildNodes[i]; treeNode.ChildNodes.Add(new TreeNode(xNode.Name)); tNode = treeNode.ChildNodes[i]; AddNode(xNode, tNode); } } else {
cây TreeView
treeNode.Text = (xmlNode.OuterXml).Trim(); }
2.5.2. Chuyển đổi một tài liệu XML thành CSDL quan hệ
Một tài liệu XML được tạo lập theo đúng cấu trúc yêu cầu sẽ được chuyển đổi và hiển thị dưới dạng một bảng CSDL quan hệ.
XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(fileName);
XmlNodeList xmlNodeList =
xmlDocument.GetElementsByTagName(nodeName); Table table = new Table();
foreach (XmlNode xmlNode in xmlNodeList) {
TableRow tableRow = new TableRow(); TableCell tableCell = new TableCell(); tableCell.Text = "Madg";
tableCell = new TableCell(); tableCell.Wrap = false;
tableCell.BorderWidth = 1; tableCell.Text =
xmlNode.Attributes["Madg"].Value; tableRow.Cells.Add(tableCell);
foreach (XmlElement xmlElement in xmlNode.ChildNodes)
{
tableCell = new TableCell(); tableCell.Wrap = false;
tableCell.BorderWidth = 1;
tableCell.Text = xmlElement.InnerText; tableRow.Cells.Add(tableCell);
}
table.Rows.Add(tableRow); }
Kết quả thực hiện thuật toán chuyển đổi tài liệu XML sang cơ sở dữ liệu quan hệ như hình minh họa sau (Hình 2.17):
Hình 2.17: Chuyển tài liệu XML sang cơ sở dữ liệu quan hệ
2.5.3. Chuyển một CSDL quan hệ thành một tài liệu XML
Để chuyển một CSDL quan hệ được tạo lập từ môi trường Microsoft SQL Server, MySQL, Microsoft Access,... thành một tài liệu XML. Cụ thể, chúng ta thực hiện cài đặt thử nghiệm trong các môi trường như sau:
2.5.3.1. Cài đặt trên môi trƣờng Microsoft SQL Server:
Server sang tài liệu XML như sau:
protected void btnCSDLSQLSERVER_Click(object sender, EventArgs e) { String strConnection = "server=phonghuong;uid=sa;database=quanlytv;password=huo ng"; SqlConnection conn; SqlDataAdapter dad;
try {
conn = new SqlConnection(strConnection);
string sql = "SELECT tblLoaisach.Tenloai, tblMuonsach.Ngaymuon, tblSach.Tensach FROM tblLmuonsach INNER JOIN (tblloaisach.Masach INNER JOIN tblSach ON tblloaisach.Maloai = tblSach.Maloai) ON tblmuonsach.Mamuon = tblsach.Mamuon;
dad = new SqlDataAdapter(sql, conn); conn.Open();
DataSet ds = new DataSet(); dad.Fill(ds, "DS_Loaisach"); ds.WriteXml(Server.MapPath("DS_Loaisach.xml"); conn.Close(); } catch (Exception) { Page.Controls.Add(new LiteralControl("<script language='javascript'> window.alert(\"Lỗi kết nối CSDL Microsoft SQL Server!\"); <" + "/script>"));
}
}// Kết thúc btnCSDLSQLSERVER_Click()
2.5.3.2. Cài đặt trên môi trƣờng MySQL
protected void btnCSDLMYSQL_Click(object sender, EventArgs e)
string dsr = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=quanlytv; uid = root; pwd=;option=3";
string sql = "SELECT Madg, Tendg, GioiTinh, Namsinh, DiaChi, Nghenghiep, Khoa, Lop, DienThoai, FROM Docgia";
try {
OdbcConnection con = new OdbcConnection(dsr); OdbcDataAdapter dad = new
OdbcDataAdapter(sql, con); con.Open();
DataSet ds = new DataSet(); dad.Fill(ds, "DS_Docgia"); dg.DataSource = ds.Tables["DS_Docgia"].DefaultView; dg.DataBind(); ds.WriteXml(Server.MapPath("DS_Docgia.xml", XmlWriteMode.IgnoreSchema); TextBox1.Text = ds.GetXml(); con.Close(); } catch (Exception) { Page.Controls.Add(new LiteralControl("<script language='javascript'> window.alert(\"Lỗi kết nối CSDL MySQL!\"); <" + "/script>"));
}
2.5.3.3. Cài đặt trên môi trƣờng Microsoft Access 2003
protected void btnCSDLMSA_Click(object sender, EventArgs e)
{
string dsr = "Provider=Microsoft.Jet.OLEDB.4.0; data source=" + Server.MapPath("quanlytv.mdb");
string sql = "SELECT Madg, Tendg, Gioitinh, Namsinh, Diachi, Nghenghiep, Khoa,Lop, DienThoai, FROM Docgia"; try
{
OleDbConnection con = new OleDbConnection(dsr); con.Open();
OleDbDataAdapter dad = new OleDbDataAdapter(sql, con);
DataSet ds = new DataSet(); dad.Fill(ds, "DS_Docgia"); dg.DataSource = ds.Tables["DS_DocGia"].DefaultView; dg.DataBind(); ds.WriteXml(Server.MapPath("DS_Docgia.xml"), XmlWriteMode.IgnoreSchema); TextBox1.Text = ds.GetXml(); con.Close(); } catch (Exception) { Page.Controls.Add(newLiteralControl("<script
language='javascript'> window.alert(\"Lỗi kết nối CSDL Microsoft Access!\"); <" + "/script>")); }
Hiển thị nội dung tài liệu XML
void showXmlData(string fileName) {
DataSet dataSet = new DataSet(); dataSet.ReadXml(fileName); if (dataSet != null) { GridView1.DataSource = dataSet.Tables[0]; GridView1.DataBind(); } }}// Kết thúc showXmlData(string)
Kết quả thực hiện thuật toán chuyển đổi cơ sở dữ liệu quan hệ sang tài liệu XML như hình minh họa sau (Hình 2.18):
Hình 2.18: Chuyển một CSDL sang tài liệu XML
2.6. Kết luận chƣơng 2
Chương 2 trình bày những mối liên hệ về nội dung của một CSDL quan hệ với nội dung của một tài liệu XML, đồng thời giới thiệu phương pháp luận để chuyển một CSDL quan hệ thành một tài liệu XML và ngược lại. Sử dụng các câu lệnh truy vấn XML và dựa trên các quy tắc ánh xạ đơn giản, dễ hiểu và chính xác. Ngoài ra, chương này còn đưa ra cách cài đặt cụ thể cho các thuật toán chuyển đổi giữa CSDL quan hệ và XML, cách chuyển đổi một CSDL sang XML và ngược lại.
CHƢƠNG 3 THỰC NGHIỆM
Trong chương này, tôi sẽ trình bày cấu trúc của chương trình thực nghiệm và một số kết quả trên thuật toán sử dụng phương pháp ánh xạ đã đưa ra trong chương 2.
3.1. Mô tả bài toán và giả thuyết
Quản lý thư viện tại thư viện trường Cao đẳng công nghiệp Nam Định tập trung vào phân loại sách theo từng phân mục cụ thể để có thể dễ dàng thuận tiện cho việc sử dụng, quản lý theo dõi sách, nhận đặt sách, ghi nhận quá trình mượn - trả - đòi sách quá hạn và quản lý độc giả. Tại trường Cao đẳng Công Nghiệp Nam Định khi học sinh, sinh viên khóa mới có kế hoạch nhập học Phòng đào tạo có chức năng phân công lớp học, nhập danh sách học sinh, sinh viên các lớp theo các hệ và theo dõi tiến độ, điểm của các lớp bằng phần mềm quản lý đào tạo.
Trên cơ sở các lớp được phân công, lớp trưởng các lớp xuống Thư viện làm