Chuyển một tài liệu XML sang một CSDL quan hệ

Một phần của tài liệu Chuyển đổi giữa cơ sở dữ liệu quan hệ và XML (Trang 77)

III. Bố cục 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.16):

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.17).

Để chuyển một tài liệu XML sang một CSDL quan hệ, ta sử dụng một trong hai 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.18):

 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. 18: Những ánh xạ cơ bản từ tài liệu XML thành CSDL quan hệ

Ví dụ 2.6: Ánh xạ tài liệu XML thành CSDL quan hệ (Hình 2.19): HOCVIEN Hoc Vien ID 0001 0002 <HocVienID> 0001 </HocVienID>

Lop ID TA01 TA02 <LopID> TA01 </LopID> <TenHocVien>

Lê Thị Thu Trang

</TenHocVien> <GioiTinh> 1984 </GioiTinh> <NamSinh> 1984 </NamSinh> <DiaChi> 255 Trần Huy Liệu, TP. Nam Định </DiaChi> <DienThoai> 0123660672 </DienThoai> <GiaoVienID> GV01 </GiaoVienID> Ten Hoc

Vien Thu Trang Lê Thị

Nguyễn Trung Thanh Gioi Tinh Nữ Nam Nam Sinh 1984 1876 Dia

Chi Huy Liệu, 255 Trần TP. Nam Định 3/12 Nguyễn Du, Tp. Nam Định Dien Thoai 01236606 72 012366677 7 Giao Vien ID GV01 GV02

Ví dụ: Chuyển từ tài liệu XML thành bảng CSDL quan hệ (Hình 2.20)

Hình 2. 20: Chuyển từ một tài liệu XML thành một CSDL quan hệ

2.3.2. Phƣơng pháp băm nhỏ hay phân tách các tài liệu XML

Phương pháp 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ệ. Ví dụ như các ứng dụng kế thừa, các ứng dụng doanh nghiệp được đóng gói hoặc phần mềm báo cáo không phải lúc nào cũng làm việc với XML. 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ệ.

Ví dụ:

Trong ví dụ này, các tài liệu XML có các thông tin về customer name,

address, và phone được bản đồ hóa thành hai bảng quan hệ. Các tài liệu có thể chứa nhiều thành phần phone vì mối quan hệ giữa khách hàng và số điện thoại của họ là mối quan hệ 1-n. Do đó, các số điện thoại sẽ được băm nhỏ

vào một bảng riêng. Mỗi một thành phần lặp, chẳng hạn như phone, sẽ dẫn đến một bảng bổ sung trong giản đồ mục tiêu quan hệ. Giả dụ các thông tin khách hàng có thể chứa nhiều địa chỉ email, nhiều tài khoản, danh sách các đơn đặt hàng gần đây, nhiều sản phẩm trong mỗi đơn hàng và các mục lặp lại khác. Khi đó số các bảng được yêu cầu trong giản đồ mục tiêu quan hệ có thể tăng rất nhanh. Tuy nhiên việc băm nhỏ XML thành một số lớn các bảng có thể dẫn đến sự phức tạp của các đối tượng logic doanh nghiệp và làm cho sự phát triển ứng dụng trở nên khó khăn hay rất dễ gây lỗi. Việc truy vấn dữ liệu đã được băm nhỏ hoặc việc lắp ráp lại các tài liệu gốc có thể cần đến nhiều mối kết nối phức tạp.

Hình 2. 21: Việc băm nhỏ một tài liệu XML

Để 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.

2.3.2.1. Ƣu điểm và nhƣợc điểm của việc băm nhỏ

Bảng 2.7 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.7. Khi việc băm nhỏ là 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.

2.3.2.2. 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ệ.

a. Ưu điểm và nhược điểm của phương pháp XMLTABLE

Bảng 2 8. Phương pháp XMLTABLE

Ƣu điểm của phƣơng pháp XMLTABLE

Nhƣợc điểm của phƣơng pháp XMLTABLE

- Cho phép bạn băm nhỏ dữ liệu thậm chí không có XML Schema.

- Mỗi một bảng mục tiêu mà bạn muốn băm nhỏ vào, bạn phải cần

đến một câu lệnh INSERT

- Không yêu cầu bạn hiểu ngôn ngữ XML Schema hoặc hiểu các chú thích của giản đồi cho việc phân tách.

- Bạn có thể phải kết hợp nhiều câu lệnh INSERT trong một thủ tục được lưu.

- Thường dễ sử dụng hơn các giản

đồ có chú thích vì được dựa trên SQL và Xpath.

- Bạn có thể sử dụng các hàm và các biểu thức quen thuộc của XPath, XQuery, hoặc SQL để trích rút và điều chỉnh các giá trị dữ liệu. - Thường yêu cầu đến ít khối lượng

- Không có hỗ trợ giao diện người dùng cho việc thực thi các

câu lệnh INSERT và các hàm

XMLTABLE cần thiết. Bạn cần phải biết về XPath và SQL/XML.

công việc trong quá trình phát triển XML Schema.

- Quá trình băm nhỏ có thể cần đến dữ liệu từ nhiều nguồn quan hệ và XML nếu cần, chẳng hạn như các giá trị từ các chuỗi DB2 hoặc dữ liệu tra cứu từ các bảng quan hệ khác.

- Có thể cung cấp hiệu suất tốt hơn phương pháp phân tách giản đồ chú thích.

b. Băm nhỏ với hàm XMLTABLE

Hàm XMLTABLE là một hàm SQL sử dụng các biểu thức XQuery để tạo các hàng quan hệ từ một tài liệu đầu vào XML. Phần này sẽ miêu tả cách sử

dụng hàm XMLTABLE trong câu lệnh để thực hiện việc băm nhỏ. Chúng ta sử

dụng kịch bản băm nhỏ trong hình 2.21 làm ví dụ.

Bước 1: Tạo một bảng quan hệ mục tiêu, nếu chưa có. Với kịch bản trong hình 2.21, các bảng mục tiêu được định nghĩa như sau:

CREATE TABLE address(cid INTEGER, name VARCHAR(30), street VARCHAR(40), city VARCHAR(30))

CREATE TABLE phones(cid INTEGER, phonetype VARCHAR(10), phonenum VARCHAR(20))

Bước 2: Dựa vào định nghĩa của các bảng mục tiêu xây dựng các câu lệnh INSERT để băm nhỏ các tài liệu XML gửi vào. Các câu lệnh INSERT

phải có dạng INSERT INTO ... SELECT ... FROM ... XMLTABLE, như thể

tham số ("?"), thông qua đó một ứng dụng có thể chuyển qua (pass) tài liệu XML được băm nhỏ. Các rule SQL yêu cầu bộ marker tham số phải biến đổi

thành kiểu dữ liệu thích hợp. Mệnh đề SELECT sẽ chọn các cột được tạo ra

bởi hàm XMLTABLE nhằm chèn vào các bảng address phones một cách

tương ứng.

INSERT INTO address(cid, name, street, city) SELECT x.custid, x.custname, x.str, x.place

FROM XMLTABLE('$i/customerinfo' PASSING CAST(? AS XML) AS

"i"

COLUMNS

custid INTEGER PATH '@Cid', custname VARCHAR(30) PATH 'name', str VARCHAR(40) PATH 'addr/street',

place VARCHAR(30) PATH 'addr/city' ) AS x ; INSERT INTO phones(cid, phonetype, phonenum) SELECT x.custid, x.ptype, x.number

FROM XMLTABLE('$i/customerinfo/phone'

PASSING CAST(? AS XML) AS "i"

COLUMNS

custid INTEGER PATH '../@Cid', number VARCHAR(15) PATH '.',

ptype VARCHAR(10) PATH './@type') AS x ;

Hình 2. 22: Chèn thành phần XML và các giá trị của thuộc tính vào các cột 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 tích hợp các hệ thống cơ sở dữ liệu quan hệ và XML, thuật toán chuyển đổi giữa các hệ thống 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.23):

Hình 2. 23: Mô hình XML ở dạng bảng và dạng cây

Để xây dựng thuật toán chuyển đổi giữa 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ệ

Bước 3: Chuyển một CSDL quan hệ sang một tài liệu XML

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.24):

Hình 2. 24: 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 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 5: Nếu phần tử đang xét là nút lá thì số các phần tử con của nó bằng 0.

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.

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.25):

Hình 2.25: 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:

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ệ.

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 (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:

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.

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.

// Tạo một tài liệu XML theo mô hình DOM đã có sẵn dữ liệu

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(Server.MapPath("HocVien.xml"));

// Khởi tạo đối tượng điều khiển TreeView TreeView1.Nodes.Clear();

TreeView1.Nodes.Add(new

TreeNode(xmlDoc.DocumentElement.Name)); TreeNode tNode = new TreeNode();

tNode = TreeView1.Nodes[0];

// Hiển thị lên TreeView theo mô hình DOM AddNode(xmlDoc.DocumentElement, tNode); TreeView1.ExpandAll();

// Thêm Node

XmlNode xNode;

TreeNode tNode;

XmlNodeList xNodeList;

int i;

// Kiểm tra tập tin XML

// Thêm các Node vào TreeView trong quá trình lặp

if (xmlNode.HasChildNodes)

{

xNodeList = xmlNode.ChildNodes;

// Lấy danh sách các phần tử con của Node

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 {

// Điền giá trị lấy được ở tập tin xml vào node ở 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);

// Lấy danh sách các Node của tài liệu XML

Một phần của tài liệu Chuyển đổi giữa cơ sở dữ liệu quan hệ và XML (Trang 77)

Tải bản đầy đủ (PDF)

(114 trang)