TẠP CHÍ KHOA HỌC, Đại học Huế, tập 73, số 4, năm 2012<br />
<br />
CHUYỂN ĐỔI HAI MÔ HÌNH DỮ LIỆU<br />
XML VÀ QUAN HỆ BẰNG CÔNG CỤ HDM<br />
Nguyễn Mậu Hân1, Trần Đình Toàn2,<br />
1<br />
Khoa Công nghệ Thông tin, Đại học Khoa học-Đại học Huế<br />
2<br />
Trường Đại học Công nghiệp Thực phẩm TP HCM<br />
<br />
Tóm tắt. Internet ra đời đáp ứng việc trao đổi thông tin ngày càng cao của con<br />
người, thông tin không còn dừng lại ở các thông điệp đơn giản mà phải được trích<br />
xuất từ ngữ nghĩa của nó. Việc chuyển đổi các mô hình dữ liệu để sử dụng trên môi<br />
trường Internet ngày càng được quan tâm, đặc biệt trong các lĩnh vực thương mại<br />
điện tử và khai phá dữ liệu. Bài báo này trình bày một phương pháp chuyển đổi dữ<br />
liệu XML, một ngôn ngữ thường được sử dụng trong các ứng dụng web, sang dữ<br />
liệu quan hệ và ngược lại bằng công cụ HDM (Hypergraph Data Model).<br />
<br />
1. Giới thiệu<br />
XML như một ngôn ngữ làm cầu nối chuyển đổi dữ liệu cho các mô hình dữ liệu<br />
khác nhau để phục vụ cho các ứng dụng trên môi trường Internet. Về cơ bản, cấu trúc<br />
của tài liệu XML và CSDL quan hệ là hoàn toàn khác nhau. Để xác định được sự tương<br />
quan giữa chúng là một công việc phức tạp, đòi hỏi phải qua nhiều bước phân tích, giữa<br />
một bên là dữ liệu lồng nhau và một bên là dữ liệu phẳng. Hiện nay, có một số phương<br />
pháp chuyển đổi dữ liệu từ XML sang quan hệ và ngược lại như phương pháp XML<br />
Schema, DOM,... Tuy nhiên, các phương pháp này còn hạn chế trong việc chuyển đổi<br />
các ràng buộc dữ liệu. Ở đây, chúng tôi lại sử dụng mô hình HDM trung gian để thực<br />
hiện việc chuyển đổi dữ liệu giữa hai mô hình XML và quan hệ nhằm đảm bảo sự toàn<br />
vẹn dữ liệu cũng như các ràng buộc dữ liệu vốn yêu cầu một cách nghiêm ngặt trong mô<br />
hình dữ liệu quan hệ.<br />
2. Mô hình dữ liệu HDM<br />
HDM là một ngôn ngữ mô hình bậc thấp được sử dụng để tạo ra mô hình dữ liệu<br />
từ nhiều nguồn dữ liệu khác nhau trong đó bao gồm cả dữ liệu quan hệ và XML. HDM<br />
dựa vào một cấu trúc dữ liệu gồm những nút và cạnh của một đồ thị cùng với những<br />
ràng buộc tạo thành một mô hình dữ liệu. Một lược đồ HDM là bộ ba S = (Nodes, Edges,<br />
Constraints). Trong đó, Nodes, Edges định nghĩa một đồ thị có nhãn, lồng nhau, có<br />
hướng. Constraints là một tập hợp các ràng buộc, cụ thể là các truy vấn đại số Boolean<br />
qua S, Nodes được xác định bởi một tên duy nhất, Edges và Constraints thì có tên tùy<br />
chọn.<br />
69<br />
<br />
2.1. Ngôn ngữ bậc cao trong HDM<br />
Cũng như các mô hình dữ liệu khác, HDM được xây dựng từ hai cấu trúc: cấu<br />
trúc mở rộng (extensional constructs) và cấu trúc ràng buộc (constraint constructs) [3].<br />
Cấu trúc mở rộng là một tập hợp những giá trị dữ liệu trong một miền đã cho.<br />
Cấu trúc này có ba lớp:<br />
- Nodal: Ánh xạ đến các nút trong HDM.<br />
- Linking: Phạm vi của một cấu trúc liên kết là một tập con của kết quả các thành<br />
phần mà nó liên kết. Cấu trúc liên kết không thể tồn tại độc lập, nó ánh xạ đến các cạnh<br />
trong HDM.<br />
- Nodal-Linking: Là cấu trúc Nodal và chỉ tồn tại khi có các thành phần khác nối<br />
đến nó. Ánh xạ vào HDM là các nút và cạnh.<br />
Cấu trúc ràng buộc là những hạn chế trên phạm vi của các cấu trúc mở rộng,<br />
chúng có thể được sử dụng để thể hiện cấu trúc lược đồ dữ liệu trong một mô hình dữ<br />
liệu. Đồng thời các ràng buộc trực tiếp sẽ được hỗ trợ trong HDM. Bảng dưới cho thấy<br />
cấu trúc quan hệ được thể hiện trong HDM.<br />
Bảng 1. Định nghĩa cấu trúc mô hình quan hệ trong HDM<br />
<br />
Cấu trúc quan hệ<br />
Construct<br />
<br />
relation (R)<br />
<br />
Class<br />
<br />
nodal<br />
<br />
Scheme<br />
<br />
<br />
<br />
Thể hiện trong HDM<br />
<br />
Node <br />
<br />
Construct attribute (A)<br />
<br />
Node <br />
<br />
Class<br />
<br />
Edge <br />
<br />
nodal-linking<br />
<br />
constraint<br />
Scheme<br />
<br />
<br />
<br />
Links <br />
Cons if (n=null)<br />
Then makeCard(,{0,1},{1..N })<br />
else makeCard(,{1},{1..N })<br />
Cons<br />
<br />
x x t<br />
<br />
Construct primary key(P)<br />
<br />
Links<br />
<br />
, ...,<br />
<br />
Class<br />
<br />
constraint<br />
<br />
Cons<br />
<br />
x x = <br />
<br />
Scheme<br />
<br />
<br />
<br />
...<br />
<br />
70<br />
<br />
Construct foreign key(F)<br />
<br />
Links<br />
<br />
,..., <br />
<br />
Class<br />
<br />
Cons<br />
<br />
...<br />
<br />
constraint<br />
<br />
Scheme <br />
<br />
<br />
<br />
<br />
Để định nghĩa cấu trúc của một mô hình dữ liệu mới M trong HDM chúng ta cần<br />
định nghĩa các biến đổi sau cho M vào trong HDM:<br />
- Đối với mỗi cấu trúc trong M ta thực hiện một phép biến đổi add để thêm các<br />
nút, cạnh hoặc ràng buộc tương đương vào lược đồ HDM. Biến đổi này có 0 hoặc một<br />
biến đổi addNode HDM, toán hạng nhận từ trường Node trong định nghĩa cấu trúc sẽ đi<br />
theo bởi 0 hoặc một biến đổi addEdge lấy từ trường Edge. Cuối cùng, một dãy của 0<br />
hoặc nhiều biến đổi addConstraint lấy từ trường Constraint được thực hiện.<br />
- Để đảo nghịch biến đổi add như đã nói ở trên chúng ta cần một biến đổi del<br />
cho mỗi cấu trúc bên trong M của nó. Như vậy, sẽ có một dãy những biến đổi HDM<br />
delConstraint đi theo có thể là delEdge hoặc delNode.<br />
- Đối với những cấu trúc có một tên là một xâu ký tự, chúng ta thực hiện biến<br />
đổi rename, là các biến đổi được định nghĩa dưới dạng của biến đổi HDM: renameNode<br />
và renameEdge.<br />
- Một thể hiện M trong HDM có thể tự động nhận dạng bằng cách thêm vào một<br />
hoặc nhiều biến đổi nguyên thủy như đã định nghĩa ở trên.<br />
2.2. Cấu trúc XML Nodal trong HDM<br />
Trong lược đồ XML mỗi phần tử (element) đóng vai trò là một cấu trúc nodal.<br />
Cấu trúc Nodal sẽ ánh xạ trực tiếp vào các nút của HDM.<br />
Khi giải thuật tìm kiếm kiểu của element tìm thấy element đó thật sự chỉ là một<br />
tham chiếu tới element khác thì element tham chiếu sẽ được thay thế bởi element đã<br />
tham chiếu. Một khi các tham chiếu đã được thay thế thì có thể giao tiếp với định nghĩa<br />
kiểu của element đó.<br />
Định nghĩa kiểu có thể là không tên, trong trường hợp element không có thuộc<br />
tính type, lúc này kiểu của nó là phần nội dung khai báo của element.<br />
Lúc này giải thuật chia các element phù hợp với các simpleType (chẳng hạn kiểu<br />
cơ sở XSD), hoặc các simpleType được khai báo hoặc không tên, hoặc của complexType.<br />
Những element và attribute kiểu simpleType được thêm vào như những nút của HDM<br />
cũng như các ràng buộc tương ứng.<br />
2.3. Cấu trúc XML Linking trong HDM<br />
Trong lược đồ XML, sự lồng nhau của các element đóng vai trò là quan hệ<br />
71<br />
<br />
linking. Cấu trúc linking ánh xạ trực tiếp đến cạnh của HDM. Sự lồng nhau này thể hiện<br />
trong các định nghĩa kiểu complexType đã thảo luận ở trên có thể có tên hoặc không tên.<br />
Đối với các element của kiểu complexType, trước hết ta thêm một nút vào mô<br />
hình HDM với các ràng buộc tương ứng. Sau đó, từ định nghĩa kiểu complexType ta tìm<br />
element con của element đó.<br />
2.4. Cấu trúc XML Linking Nodal trong HDM<br />
Cấu trúc Link nodal ánh xạ vào nút và cạnh của HDM. Trong lược đồ XML các<br />
attribute đóng vai trò là cấu trúc link nodal. Cũng giống như việc thêm cạnh giữa các<br />
element cha và attribute con nên trong thuật toán phải thêm một nút attribute. Mục này<br />
phải xử lý riêng vì hai lý do:<br />
- Tránh sự nhầm lẫn của các ràng buộc được định nghĩa thông qua các attribute<br />
khác, cách mà chúng được định nghĩa qua các element.<br />
- Quy định cách đặt tên để attribute định danh trong mô hình HDM cho phép<br />
đảo ngược quá trình chuyển đổi.<br />
Chúng ta quy ước, thêm vào đầu tên attribute với tên element cha bởi dấu gạch<br />
nối dưới.<br />
2.5. Cấu trúc XML Constraint trong HDM<br />
Một số cách thể hiện ràng buộc trong lược đồ XML:<br />
- Các thuộc tính trong định nghĩa element có thể là ràng buộc trực tiếp hoặc trỏ<br />
đến một vị trí trong lược đồ, nơi mà các ràng buộc đã được định nghĩa.<br />
- Các thuộc tính trong định nghĩa attribute cũng giống như các ràng buộc định<br />
nghĩa trong khai báo element, một khác biệt đáng kể là cách mà các ràng buộc biến cố<br />
được định nghĩa.<br />
Các khai báo kiểu simpleType. Các khai báo này xây dựng dựa trên kiểu XSD cơ<br />
sở hoặc một kiểu simpleType khác, thêm một giới hạn để định nghĩa nhiều kiểu tốt hơn.<br />
Khi các định nghĩa xây dựng dựa trên các định nghĩa kiểu simpleType khác ta cần thêm<br />
tất cả các ràng buộc đã định nghĩa trong kiểu cơ sở vào các ràng buộc rút ra trực tiếp từ<br />
khai báo kiểu.<br />
2.6. Mô hình quan hệ trong HDM<br />
Mô hình quan hệ bao gồm các quan hệ, thuộc tính, một khoá chính cho mỗi<br />
quan hệ và các khóa ngoại.<br />
- Các quan hệ được thể hiện trong HDM bởi các nút, phạm vi một quan hệ là<br />
khóa chính của nó.<br />
- Các thuộc tính thể hiện bởi những nút và có phạm vi là một mình chúng, chúng<br />
72<br />
<br />
không thể tồn tại độc lập, mà phải kèm theo định nghĩa một cạnh trong HDM, cạnh này<br />
được nối từ nút là tên của quan hệ đến thuộc tính đó. Các thuộc tính quan hệ được ràng<br />
buộc bằng null hay not null. Sự ràng buộc này được thể hiện trong HDM như một sự lựa<br />
chọn giữa tùy chọn (null{0,1}) hoặc (null{1}).<br />
- Khóa chính là một ràng buộc kiểm tra phạm vi của quan hệ r có giống phạm vi<br />
của những thuộc tính khóa a1,.., an hay không.<br />
- Khóa ngoại là tập hợp những thuộc tính a1,.., an xuất hiện trong quan hệ r mà là<br />
khoá chính của quan hệ rf khác.<br />
- Đối với các ràng buộc trong HDM, ta có thể dùng 2 kiểu cơ bản sau: Integer và<br />
String với độ rộng tùy ý.<br />
2.7. XML trong HDM<br />
Sắp xếp tự nhiên của dữ liệu trong một tài liệu XML đòi hỏi một số khái niệm<br />
phải được mô tả vào HDM. Điều này sẽ được thực hiện thông qua một nút thứ tự dự trữ.<br />
Phạm vi của nút thứ tự là tập hợp những số và thể hiện tự nhiên của những thành viên<br />
của tập cạnh. Bảng 2 thể hiện định nghĩa của XML trong HDM.<br />
Xử lý tài liệu XML trong HDM như sau:<br />
- Các element là những cấu trúc nodal, thể hiện trong HDM là một nút.<br />
- Các attribute là những cấu trúc nodal linking, thể hiện trong HDM bởi một nút<br />
và một cạnh không nhãn liên kết nút mới đến element cha.<br />
- Mỗi element lồng vào một element khác được thể hiện thành một cạnh trong<br />
HDM.<br />
- Một nút HDM gọi là pcdata được định nghĩa để lưu trữ các text xuất hiện giữa<br />
các thẻ phần tử. Một phần tử liên quan đến một phần của text được mô tả bằng<br />
một cạnh không nhãn .<br />
Bảng 2. Định nghĩa cấu trúc XML trong HDM<br />
<br />
Cấu trúc XML<br />
Construct<br />
<br />
element (R)<br />
<br />
Class<br />
<br />
nodal, set<br />
<br />
Scheme<br />
<br />
<br />
<br />
Thể hiện trong HDM<br />
<br />
Node<br />
<br />
<br />
<br />
Construct attribute (Att)<br />
<br />
Node <br />
<br />
Class<br />
<br />
Edge<br />
<br />
nodal-linking<br />
constraint, list<br />
<br />
<br />
<br />
Links <br />
73<br />
<br />