Nhƣ chúng ta biết, các CSDL tồn tại thƣờng đã đƣợc chuẩn hóa ở mức cao (chuẩn hóa hoàn toàn). Mặt khác, các CSDL tồn tại trong các tài liệu XML thì không nhất thiết phải chuẩn hóa ở mức cao mà nó chỉ đƣợc chuẩn hóa một phần, bởi các CSDL đã đƣợc chuẩn hóa có thể giải quyết đƣợc các dị thƣờng trong lƣu trữ, cập nhật, bảo trì CSDL nhƣng nếu chúng đƣợc thiết kế chặt chẽ quá thì có thể dẫn tới việc xử lý dữ liệu không hiệu quả.
Chính vì vậy, để chuyển một CSDL quan hệ sang một tài liệu XML thì chúng ta phải xây dựng CSDL đó dựa theo cấu trúc của một tài liệu XML. Việc này hoàn toàn có thể làm đƣợc thông qua việc khử chuẩn hóa (phi chuẩn) bằng cách chuyển đổi các quan hệ đã đƣợc chuẩn hóa ở mức cao hơn thành những dạng chuẩn hóa ở mức thấp hơn nhằm tăng tốc độ truy nhập, lƣu trữ trong CSDL. Sau khi đã phi chuẩn các CSDL, các CSDL đƣợc kết nối lại và đƣợc ánh xạ vào trong một DOM chính sau đó đƣợc chuyển thành một tài liệu XML.
Để chuyển một CSDL quan hệ thành một tài liệu XML, ta phải giải quyết các vấn đề sau:
SinhVien
SinhVienID HoTenSV NganhHocID DiaChi
001 Le Thi Thoa 11 Ha Noi
002 Tran Thi Phuong 10 Ha Noi
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
2.3.1 Phi chuẩn các lược đồ quan hệ
Trên thực tế, các CSDL thƣờng tồn tại dƣới dạng các CSDL đã đƣợc chuẩn hóa nhằm giải quyết các dị thƣờng trong lƣu trữ, cập nhật, bảo trì CSDL. Do vậy, để CSDL đó phù hợp với cấu trúc của một tài liệu XML thì CSDL đó phải đƣợc phi chuẩn hóa – chuyển đổi các quan hệ đã đƣợc chuẩn hóa thành những quan hệ chuẩn hóa ở mức thấp hơn với những mục đích xử lý dữ liệu một cách hiệu quả nhất.
Để phi chuẩn CSDL quan hệ chúng ta căn cứ vào một số trƣờng hợp cụ thể sau:
Trường hợp hai quan hệ được hình thành từ hai kiểu thực thể tham gia liên kết một – một: nếu việc truy xuất giữa hai quan hệ diễn ra thƣờng xuyên thì chúng ta nên kết hợp chúng thành một quan hệ.
Ví dụ 2.2:
Có hai quan hệ đã đƣợc chuẩn hóa, một quan hệ SinhVien liên kết với
một quan hệ User thông qua khóa UserName.
Hình 2.4 Sơ đồ thực thể liên kết
Các quan hệ đƣợc chuẩn hóa: USER
SINHVIEN
Hình 2.5 Chuẩn hóa các quan hệ
UserName Password
Ma_SV UserName TenSV DiaChi
Có USER SINHVIEN Ma_SV DiaChi UserName TenSV UserName Password
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
=> Các quan hệ đƣợc phi chuẩn: SINHVIEN
Ma_SV UserName TenSV DiaChi Password
Hình 2.6 Phi chuẩn quan hệ
Trường hợp các quan hệ được hình thành từ một liên kết nhiều – nhiều với các thuộc tính trong liên kết không phải là khóa. Thay vì phải hình thành 3 quan hệ, chúng ta có thể kết hợp thành hai quan hệ chính bằng cách gộp các thuộc tính trong một quan hệ vào quan hệ đƣợc hình thành từ liên kết.
Ví dụ 2.3: Cho các quan hệ đã đƣợc chuẩn hóa
Hình 2.7 Sơ đồ thực thể liên kết TenMH Ma_MH GhiChu MONHOC GhiChu HOCKY Ma_HK TenH K Thuộc NganhHoc
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Các quan hệ đã đƣợc chuẩn hóa: MONHOC
MONHOC_HOCKY
Ma_HK Ma_MH NganhHoc
HOCKY
Hình 2.8 Chuẩn hóa quan hệ
Quan hệ đƣợc phi chuẩn:
Ma_HK Ma_MH TenMH NganhHoc GhiChu
Ma_HK TenHK
Hình 2.9 Phi chuẩn quan hệ
Trường hợp hai quan hệ được hình thành từ liên kết một – nhiều và kiểu thực thể liên kết đầu một không tham gia vào bất cứ một liên kết nào khác. Khi đó chúng ta có thể cân nhắc đến việc kết hợp hai quan hệ đƣợc hình thành từ hai kiểu thực thể này thành một quan hệ.
Ví dụ 2.4: Cho các quan hệ đã đƣợc chuẩn hóa:
Hình 2.10 Sơ đồ thực thể liên kết
Ma_MH TenMH GhiChu
Ma_HK TenHK Đăng ký SINHVIEN Ma_SV DiaChi TenSV Ma_NganhHoc TenMH DANGKYHOC HocKy Ma_NganhHoc Ma_SV Đăng ký
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Quan hệ đã đƣợc chuẩn hóa: SINHVIEN
Ma_SV TenSV Ma_NganhHoc DiaChi
DANGKYHOC
Ma_SV Ma_NganhHoc TenMH HocKy
Quan hệ đƣợc phi chuẩn: SV_DANGKYHOC
Ma_SV TenSV Ma_NganhHoc TenMH HocKy DiaChi
Hình 2.11 Phi chuẩn quan hệ
2.3.2 Kết nối các CSDL đã phi chuẩn
Với các CSDL đã đƣợc tạo trong một hệ quản trị CSDL (cụ thể nhƣ MS Access hay SQL Server) . Sau khi tiến hành phi chuẩn các CSDL này, ta thực hiện tạo kết nối tới các bảng CSDL đã tạo đồng thời thiết lập các kết nối giữa các bảng CSDL đã tạo, đảm bảo sao cho các ràng buộc dữ liệu vẫn đƣợc bảo toàn khi kết nối. Để tạo kết nối tới các bảng CSDL quan hệ, ta sử dụng cầu nối ODBC trong Windows. Với cầu nối này, các CSDL đã tạo sẽ đƣợc kết nối tới hệ thống. Khi đó, ta có thể truy xuất dữ liệu của các tệp CSDL quan hệ đã kết nối.
Nhằm đáp ứng các nhu cầu sử dụng dữ liệu khác nhau của ngƣời dùng, các CSDL phải đƣợc kết nối với nhau. Ngôn ngữ truy vấn trong SQL hay SQL Server là một trong những công cụ hữu ích giúp ta kết nối đƣợc dữ liệu giữa các bảng CSDL quan hệ mà vẫn đảm bảo đƣợc các ràng buộc dữ liệu, đồng thời đáp ứng một cách linh hoạt các mục đích, nhu cầu sử dụng dữ liệu của ngƣời dùng.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Các dữ liệu sau khi đƣợc kết nối sẽ đƣợc lƣu trữ trong một bảng dữ liệu liên kết.
Ví dụ 2.5: Cho bảng CSDL quan hệ sau:
Bảng 2.6 Bảng NGANHHOC Bảng 2.7 Bảng MONHOC
Và bảng CSDL MONHOC_NGANH nhƣ sau:
Bảng 2.8 Bảng MONHOC_NGANH
Ma_MH Ma_Nganh SoTinChi DieuKien
1 1 2
2 1 3
3 1 2
4 2 3
5 5 2
Bảng dữ liệu liên kết đƣợc xây dựng khi ta kết nối dữ liệu trên các bảng theo nhu cầu sử dụng dữ liệu của ngƣời dùng thông qua truy vấn SQL (hay SQL thông thƣờng).
Bảng NGANHHOC Bảng MONHOC
Ma_Nganh TenNganh
1 CNTT
2 ĐK tàu biển
3 Máy tàu biển
4 Điện – Điện tử 5 Kinh tế vận tải 6 Đóng tàu 7 Công trình thủy Ma_MH TenMH 1 Lập trình mạng
2 Tin học đại cƣơng
3 Chƣơng trình dịch
4 Triết học
5 Giải tích 1
6 Anh văn
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Câu lệnh SQL đƣợc sử dụng là:
Select MONHOC.TenMH, NGANHHOC.TenNganh, MONHOC_NGANH.SoTinChi
From (NGANHHOC Inner Join MONHOC_NGANH on NGANHHOC.Ma_Nganh
= MONHOC_NGANH.Ma_Nganh) Inner Join MONHOC on MONHOC.MA_MH = MONHOC_NGANH.Ma_MH
Where NGANHHOC.TenNganh = ‘CNTT’;
=> Dữ liệu sau khi kết nối sẽ đƣợc lƣu vào bảng dữ liệu liên kết:
TenMH TenNganh SoTinChi
Lập trình mạng CNTT 2
Tin học đại cƣơng CNTT 3
Chƣơng trình dịch CNTT 2
Bảng 2.9 Dữ liệu bảng liên kết
2.3.3 Ánh xạ một CSDL quan hệ đã kết nối thành một DOM chính và chuyển thành một tài liệu XML chuyển thành một tài liệu XML
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Hình 2.12 Cấu trúc cây tài liệu XML đƣợc tổ chức theo mô hình DOM
Căn cứ trên cấu trúc của một tài liệu XML cũng nhƣ mối quan hệ giữa một tài liệu XML và một CSDL quan hệ chúng ta có một số ánh xạ cơ bản từ một CSDL quan hệ sang một tài liệu XML nhƣ sau:
(1) R_ET: một quan hệ R đƣợc ánh xạ thành một kiểu phần tử ET. (2) A_ET: một thuộc tính (A) của quan hệ đƣợc ánh xạ thành một kiểu phần tử (ET) nhờ vào quan hệ của thuộc tính đƣa ra quan hệ của kiểu phần tử.
(3) A_A: một thuộc tính của một quan hệ đƣợc ánh xạ thành một thuộc tính XML.
a1: Text
Group: Element
doc: Document Group: Element
E1: Element
E2: Element
E3: Element
a2: Text
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn Nội dung XML Những khả năng ánh xạ Nội dung CSDL quan hệ Hình 2.13 Những ánh xạ cơ bản Ví dụ 2.6: Ánh xạ một CSDL quan hệ thành một tài liệu XML:
<SinhVien
SinhVienID= “001” HoTenSV= “Tran An” NganhHocID= “11” DiaChi= “Ha Noi”> </SinhVien>
...
Hình 2.14 Ánh xạ một CSDL sang một tài liệu XML
Sau khi thực hiện kết nối các bảng CSDL quan hệ. Bảng CSDL liên kết đƣợc hình thành và đƣợc ánh xạ thành DOM chính theo các nguyên tắc ánh xạ cơ bản và sau đó đƣợc chuyển thành một tài liệu XML tƣơng ứng.
Quan hệ
Thuộc tính Thuộc tính Thuộc tính
SinhVien
SinhVienID HoTenSV NganhHocID DiaChi
001 Tran An 11 Ha Noi
002 Tran Thi Phuong 10 Ha Noi
003 Nguyen Van Nam 12 Ha Noi
Kiểu phần tử Thuộc tính
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Hình 2.15 Các bƣớc ánh xạ một CSDL quan hệ thành một tài liệu XML
Bƣớc 1
Phi chuẩn CSDL quan hệ
CSDL quan hệ Lƣợc đồ quan hệ Kết nối với bảng 1 Kết nối với bảng 2 Kết nối với bảng n Tài liệu XML Bƣớc 2
Kết nối dữ liệu giữa các bảng
Bƣớc 3
Kết hợp thành cây theo DOM ….. …..
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
2.4 Kết luận
Trong 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 đã đƣa ra 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. Bằng việc 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 đã trình bày trong chƣơng này, chúng ta đã có cơ sở để đƣa ra các cài đặt cụ thể cho thuật toán tích hợp sẽ đƣợc trình bày trong chƣơng tiếp theo.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
CHƢƠNG 3: THUẬT TOÁN TÍCH HỢP CÁC HỆ THỐNG CƠ SỞ DỮ LIỆU QUAN HỆ VÀ XML
3.1 Thuật toán
Căn cứ vào phƣơng pháp luận tích hợp các hệ thống cơ sở dữ liệu quan hệ và XML, thuật toán tích hợp các hệ thống cơ sở dữ liệu quan hệ đƣợc xây dựng tổng quát [6], [8] nhƣ sau:
Hình 3.1 Mô hình XML ở dạng cây và dạng bảng
3.1.1 Đọc tài liệu XML dưới dạng sơ đồ hình cây
Một cây đƣợc tạo thành từ nhiều nút, mỗi nút cũng 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
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
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 đây:
Hình 3.2 Biểu diễn tài liệu XML theo mô hình DOM
Thuật toán:
Tài liệu XML đƣợc đọc thông qua hình thức đọc một file dữ liệu và đƣợc xây dựng theo dạng mô hình DOM thông qua việc:
o Truy cập và lấy phần tử gốc của tài liệu
o Lấy danh sách tất cả các phần tử con của phần tử gốc
o Mỗi phần tử con tìm đƣợc sẽ đƣợc gán một chỉ số đặc trƣng
o Quá trình tìm các phần tử con đƣợc thực hiện theo phƣơng pháp đệ quy
o Nếu phần tử đang xem xét là lá thì số các phần tử con của nó bằng 0
o 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
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
o Lấy tên các phần tử con và các giá trị thuộc tính của nó
o 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 giống nhƣ trong Windows.
3.1.2 Hiển thị tài liệu XML dưới dạng bảng
Nhƣ ở 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.
Để 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:
o Duyệt 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 kỹ thuật đệ quy.
o 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.
o 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ệ.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Hình 3.3 Hiển thị tài liệu XML ở dạng bảng
3.1.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 (sử dụng công cụ Administrative Tools của Windows). Sau đó thực hiện thuật toán sau:
Thuật toán:
o Xây dựng lớp kết nối với JDBC - ODBC để kết nối dữ liệu đƣợc xây
dựng trong môi trƣờng MS Access hay SQL Server.
o 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.
o 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.
3.2 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# [3]. 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 MS Access hay SQL Server. Các tài liệu XML có thể đƣợc tạo lập trong môi
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
trƣờng WordPad, NotePad, XML Editor, … Chi tiết và giao diện cài đặt cụ thể thuật toán tích hợp các hệ thống CSDL quan hệ và XML đƣợc mô phỏng nhƣ sau:
Đọc tài liệu XML dƣới dạng sơ đồ hình cây:
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.
// Tao mot tai lieu XML theo mo hinh DOM da co san du lieu XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("SinhVien.xml")); // Khoi tao dieu khien TreeView
TreeView1.Nodes.Clear(); TreeView1.Nodes.Add(new
TreeNode(xmlDoc.DocumentElement.Name)); TreeNode tNode = new TreeNode();
tNode = TreeView1.Nodes[0];
// Hien thi len TreeView theo mo hinh DOM AddNode(xmlDoc.DocumentElement, tNode); TreeView1.ExpandAll(); // AddNode: XmlNode xNode; TreeNode tNode; XmlNodeList xNodeList; int i;
// Kiem tra file XML
// Them cac Node vao TreeView trong qua trinh lap if (xmlNode.HasChildNodes)
{
xNodeList = xmlNode.ChildNodes;
//Lay danh sach cac phan tu con cua Node for (i = 0; i <= xNodeList.Count - 1; i++) {
xNode = xmlNode.ChildNodes[i];
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn tNode = treeNode.ChildNodes[i]; AddNode(xNode, tNode); } } else {
// Dien gia tri lay duoc o file xml vào Node ở TreeView treeNode.Text = (xmlNode.OuterXml).Trim();
}
Chuyển đổi một tài liệu XML thành một 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 = "NganhHocID";
tableCell = new TableCell(); tableCell.Wrap = false; tableCell.BorderWidth = 1; tableCell.Text =
xmlNode.Attributes["NganhHocID"].Value; tableRow.Cells.Add(tableCell);
foreach (XmlElement xmlElement in xmlNode.ChildNodes) {
tableCell = new TableCell(); tableCell.Wrap = false; tableCell.BorderWidth = 1;
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
tableRow.Cells.Add(tableCell); }
table.Rows.Add(tableRow);