Tải bản đầy đủ (.pdf) (13 trang)

CHUYỂN ĐỔI HAI MÔ HÌNH DỮ LIỆU XML VÀ QUAN HỆ BẰNG CÔNG CỤ HDM pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (238.07 KB, 13 trang )



69

TẠP CHÍ KHOA HỌC, Đại học Huế, tập 73, số 4, năm 2012


CHUYỂN ĐỔI HAI MÔ HÌNH DỮ LIỆU
XML VÀ QUAN HỆ BẰNG CÔNG CỤ HDM
Nguyễn Mậu Hân
1
, Trần Đình Toàn
2
,
1
Khoa Công nghệ Thông tin, Đại học Khoa học-Đại học Huế
2
Trường Đại học Công nghiệp Thực phẩm TP HCM

Tóm tắt. Internet ra đời đáp ứng việc trao đổi thông tin ngày càng cao của con
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
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
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
đ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ữ
liệu XML, một ngôn ngữ thường được sử dụng trong các ứng dụng web, sang dữ
liệu quan hệ và ngược lại bằng công cụ HDM (Hypergraph Data Model).

1. Giới thiệu
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
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
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


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
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
pháp chuyển đổi dữ liệu từ XML sang quan hệ và ngược lại như phương pháp XML
Schema, DOM, Tuy nhiên, các phương pháp này còn hạn chế trong việc chuyển đổi
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
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
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ô
hình dữ liệu quan hệ.
2. Mô hình dữ liệu HDM
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
từ nhiều nguồn dữ liệu khác nhau trong đó bao gồm cả dữ liệu quan hệ và XML. HDM
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
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,
Constraints). Trong đó, Nodes, Edges định nghĩa một đồ thị có nhãn, lồng nhau, có
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
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
chọn.


70

2.1. Ngôn ngữ bậc cao trong HDM
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
trúc mở rộng (extensional constructs) và cấu trúc ràng buộc (constraint constructs) [3].
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.
Cấu trúc này có ba lớp:
- Nodal: Ánh xạ đến các nút trong HDM.
- 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
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
trong HDM.

- 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
đến nó. Ánh xạ vào HDM là các nút và cạnh.
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,
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ữ
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
cấu trúc quan hệ được thể hiện trong HDM.
Bảng 1. Định nghĩa cấu trúc mô hình quan hệ trong HDM
Cấu trúc quan hệ Thể hiện trong HDM
Construct relation (R)
Class nodal
Scheme <<r>>

Node <<rel:r>>
Construct attribute (A)
Class nodal-linking
constraint
Scheme <<r, a, n, t>>
Node <<rel:r:a>>
Edge <<_, rel:r, rel:r:a>>
Links <<rel:r>>
Cons if (n=null)
Then makeCard(<<_,rel:r,rel:r:a>>,{0,1},{1 N })
else makeCard(<<_,rel:r,rel:r:a>>,{1},{1 N })
Cons x  <<rel:r:a>>  x  t
Construct primary key(P)
Class constraint
Scheme <<r, a
1
, , a
n

>>

Links <<rel:r:a
1
>>, ,<<rel:r:a
n
>>
Cons x  <<rel:r>>  x = <x
1
, x
n
>
 <x, x
1
>  <<_,rel:r, rel:r:a
1
>> 
 <x, x
n
>  <<_,rel:r, rel:r:a
n
>>


71

Construct foreign key(F)
Class constraint
Scheme <<r,r
f

,a
1
, ,a
n
>>
Links <<rel:r:a
1
>>, , <<rel:r:a
n
>>
Cons <x, x
1
>  <<_,rel:r, rel:r:a
1
>> 
<x, x
n
>  <<_,rel:r, rel:r:a
n
>>
 <x
1
, ,x
n
>  <<rel:r
f
>>
Để đị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
định nghĩa các biến đổi sau cho M vào trong HDM:
- Đố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

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
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
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
hoặc nhiều biến đổi addConstraint lấy từ trường Constraint được thực hiện.
- Để đảo nghịch biến đổi add như đã nói ở trên chúng ta cần một biến đổi del
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
delConstraint đi theo có thể là delEdge hoặc delNode.
- Đố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
đổi rename, là các biến đổi được định nghĩa dưới dạng của biến đổi HDM: renameNode
và renameEdge.
- 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
hoặc nhiều biến đổi nguyên thủy như đã định nghĩa ở trên.
2.2. Cấu trúc XML Nodal trong HDM
Trong lược đồ XML mỗi phần tử (element) đóng vai trò là một cấu trúc nodal.
Cấu trúc Nodal sẽ ánh xạ trực tiếp vào các nút của HDM.
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
tham chiếu tới element khác thì element tham chiếu sẽ được thay thế bởi element đã
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
kiểu của element đó.
Định nghĩa kiểu có thể là không tên, trong trường hợp element không có thuộc
tính type, lúc này kiểu của nó là phần nội dung khai báo của element.
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
cơ sở XSD), hoặc các simpleType được khai báo hoặc không tên, hoặc của complexType.
Những element và attribute kiểu simpleType được thêm vào như những nút của HDM
cũng như các ràng buộc tương ứng.
2.3. Cấu trúc XML Linking trong HDM
Trong lược đồ XML, sự lồng nhau của các element đóng vai trò là quan hệ


72


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
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.
Đố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ô
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
element con của element đó.
2.4. Cấu trúc XML Linking Nodal trong HDM
Cấu trúc Link nodal ánh xạ vào nút và cạnh của HDM. Trong lược đồ XML các
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
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
phải xử lý riêng vì hai lý do:
- 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
khác, cách mà chúng được định nghĩa qua các element.
- Quy định cách đặt tên để attribute định danh trong mô hình HDM cho phép
đảo ngược quá trình chuyển đổi.
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
nối dưới.
2.5. Cấu trúc XML Constraint trong HDM
Một số cách thể hiện ràng buộc trong lược đồ XML:
- 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ỏ
đến một vị trí trong lược đồ, nơi mà các ràng buộc đã được định nghĩa.
- Các thuộc tính trong định nghĩa attribute cũng giống như các ràng buộc định
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ố
được định nghĩa.
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ơ
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.
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
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ừ
khai báo kiểu.
2.6. Mô hình quan hệ trong HDM

Mô hình quan hệ bao gồm các quan hệ, thuộc tính, một khoá chính cho mỗi
quan hệ và các khóa ngoại.
- Các quan hệ được thể hiện trong HDM bởi các nút, phạm vi một quan hệ là
khóa chính của nó.
- 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


73

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
đượ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
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
chọn giữa tùy chọn (null{0,1}) hoặc (null{1}).
- 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
của những thuộc tính khóa a
1
, , a
n
hay không.
- Khóa ngoại là tập hợp những thuộc tính a
1
, , a
n
xuất hiện trong quan hệ r mà là
khoá chính của quan hệ r
f
khác.
- Đố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à
String với độ rộng tùy ý.
2.7. XML trong HDM

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
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ữ.
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
của tập cạnh. Bảng 2 thể hiện định nghĩa của XML trong HDM.
Xử lý tài liệu XML trong HDM như sau:
- Các element là những cấu trúc nodal, thể hiện trong HDM là một nút.
- Các attribute là những cấu trúc nodal linking, thể hiện trong HDM bởi một nút
và một cạnh không nhãn liên kết nút mới đến element cha.
- Mỗi element lồng vào một element khác được thể hiện thành một cạnh trong
HDM.
- 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
các thẻ phần tử. Một phần tử <<e>> liên quan đến một phần của text được mô tả bằng
một cạnh không nhãn <<_, e, pcdata>>.
Bảng 2. Định nghĩa cấu trúc XML trong HDM
Cấu trúc XML Thể hiện trong HDM
Construct element (R)
Class nodal, set
Scheme <<e>>

Node <<xml:e>>
Construct attribute (Att)
Class nodal-linking
constrai
nt, list
Node <<xml:e:a>>
Edge <<_, xml:e, xml:e:a>>
Links <<xml:e>>


74


Scheme <<e,a>>
Cons makeCard(<<_, xml:e, xml:e:a>>,0:1,1:N)
Construct nest-list (List)
Class linking
constraint, list
Scheme <<e, e
s
>>
Edge <<_,xml:e,xml:e
s
>>,<<_,<<_, xml:e,xml:e
s
>>,
order>>
Links <<xml:e>>, <<xml:e
s
>>
Cons makeCard(<<_,<<_, xml:e, xml:e
s
>>, order>>,
1:1,0:N)
Construct nest-set (Set)
Class linking, set
Scheme <<e, e
s
>>
Edge <<_,xml:e, xml:e
s
>>

Links <<xml:e>>, <<xml:e
s
>>
Các phần tử và thuộc tính trong một tài liệu XML được định danh duy nhất bởi
vị trí của nó trong tài liệu. Việc thể hiện một tài liệu XML trong HDM được mô tả bởi
một nút được gán một định danh duy nhất dựa vào vị trí của nó.
Ví dụ: Dữ liệu XML như bảng dưới và được thể hiện trong HDM như sau:
<shoes xmlns:xsi="
xsi:noNamespaceSchemaLocation="file:shoes.xsd">
<! XML representation of two shoes >
<shoe shoeid="1">
<make makeid="6">
<makename>adidas</makename>
</make>
<price>100</price>
<colour>red</colour>
<country>china</country>
</shoe>
<shoe shoeid="2">
<make makeid="4">
<makename>nike</makename>
</make>
<price>200</price>
<colour>blue</colour>
shoes
shoe
price colour make
countr
y


make:

makeid

makena
me

Thể hiện XML trong HDM


75

<country>usa</country>
<country>china</country>
</shoe>
</shoes>
Tập các nút:
<<shoes>> = {shoes1}
<<shoe>> = {shoe1, shoe2}
<<make>> = {make1, make2}
<<makename>> = {adidas, nike}
<<make_makeid>> = {6, 4}
<<price>> = {100, 200}
<<colour>> = {red, blue}
<<country>> = {china, usa}
<<shoe_shoeid>> = {1, 2}
Tập các cạnh:
<<_, <<make>>, <<makename>> >> = {{make1, adidas}, {make2, nike}}
<<_, <<make>>, <<make_makeid>> >> = {{make1, 6}, {make2, 4}}
<<_, <<shoe>>, <<make>> >> = {{shoe1, make1}, {shoe2, make2}}

<<_, <<shoe>>, <<price>> >> = {{shoe1, 100}, {shoe2, 200}}
<<_, <<shoe>>, <<colour>> >> = {{shoe1, red}, {shoe2, blue}}
<<_, <<shoe>>, <<country>> >> ={{shoe1,china},{shoe2, usa},{shoe2, china}}
<<_, <<shoe>>, <<shoe_shoeid>> >> = {{shoe1, 1}, {shoe2, 2}}
<<_, <<shoes>>, <<shoe>> >> = {{shoes1, shoe1}, {shoes1, shoe2}}
2.8. Lược đồ XML trong HDM
Các phần tử complexType, element và attribute trong một tài liệu XML sẽ xác
định nơi những phần tử và thuộc tính trong tài liệu thể hiện XML tuân theo. Thuộc tính
type trong định nghĩa element hoặc attribute chỉ rỏ rằng kiểu dữ liệu nào có thể xuất
hiện trong mục đó. Key và keyref như những ràng buộc định danh trên dữ liệu.
Lược đồ XML là một ngôn ngữ ràng buộc, định nghĩa kiểu và cấu trúc của dữ
liệu xuất hiện trong một tài liệu thể hiện XML phù hợp với lược đồ. Một lược đồ XML
có thể tồn tại độc lập với những tài liệu khác. Điều này có thể xảy ra ở giai đoạn đầu của


76

quá trình thiết kế. Thông thường thì có hơn một tài liệu thể hiện.
3. Thuật toán chuyển đổi giữa hai mô hình dữ liệu XML và quan hệ bằng HDM
3.1. Chuyển đổi từ XML sang CSDL quan hệ
3.1.1. Chuyển đổi giữa tài liệu XML và HDM
Thuật toán chuyển từ file XML vào HDM:
- Vào: File XML, HDM
- Ra: Nội dung của các nút (node), cạnh (edge) và ràng buộc (constraint) của
HDM tương ứng với file XML
Phương pháp:
- Bước 1: Duyệt qua danh sách các element, attribute, complexType, simpleType
đã xây dựng từ bước phân tích lược đồ XML.
- Bước 2: Đối với mỗi attribute, thêm phạm vi của nút trong HDM bằng nội
dung của attribute trong file XML.

- Bước 3: Đối với các element là lá (không có con), phạm vi của nút được xử lý
giống như attribute.
- Bước 4: Đối với các element của kiểu complexType (chứa những element và
attribute con), thêm phạm vi của nút là nội dung của element trong file XML. Tiếp đó
thêm phạm vi của cạnh từ element này đến các con của nó là giá trị của element cha và
giá trị của các element hoặc attribute con.
- Bước 5: Đối với các nút kiểu phức tạp, phạm vi của nút phát sinh tuần tự trong
file XML mà nó thể hiện (Quy ước: tên của phần tử + số thứ tự thể hiện). Sau đó tìm
các con của nút đó để xây dựng phạm vi của cạnh từ nút đến các con (chính là tên quy
ước ở trên và nội dung của element hoặc attribute con).
Độ phức tạp của thuật toán là O(n), với n là số các element và attribute của file
XML. Vì số attribute của một element trong một tài liệu XML là hữu hạn nên thuật toán
sẽ dừng khi duyệt hết các nút lá. Tính đúng đắn của thuật toán đã được chứng minh từ
các thuật toán duyệt cây đã có.
3.1.2. Chuyển đổi giữa CSDL quan hệ và HDM
Tạo Database từ HDM
Để chuyển đổi từ một lược đồ HDM thành một lược đồ CSDL quan hệ, ta ánh xạ
các nút phức hợp vào các quan hệ, nút lá và các thuộc tính là các trường trong các quan
hệ đó. Mối quan hệ giữa các nút phức hợp và con của nó cũng cần được thể hiện trong
mô hình quan hệ. Cách tốt nhất để thể hiện điều này là sử dụng các khóa ngoại, vì một
nút cha có thể có nhiều con khác nhau, nhưng một nút con chỉ có một nút cha có nghĩa


77

là đặt trường khóa ngoại này vào quan hệ con. Theo phương pháp này, chúng ta có thể
bảo đảm CSDL đó tối thiểu ở dạng chuẩn 2. Ở đây, chúng ta sẽ tạo ra CSDL bằng hai
giai đoạn được biểu hiện bởi hai thuật toán: thuật toán tạo Database và thuật toán chèn
dữ liệu vào Database.
Thuật toán tạo Database từ HDM:

- Vào: HDM
- Ra: Các câu lệnh SQL để tạo Database
Phương pháp:
- Bước 1: Xuất phát từ nút gốc.
- Bước 2: Phát sinh câu lệnh tạo table của nút gốc với tên là tên của nút, khoá
chính của table chính là tên nút.
 Duyệt qua HDM tìm tất cả các con của nút hiện hành (nhờ các cạnh).
 Mỗi nút hiện hành chính là 1 trường của table.
 Nếu nút con là nút lá, thêm thành 1 trường vào table cha.
 Nếu nút con là nút phức hợp:
o Phát sinh câu lệnh tạo table với tên là tên của nút, khoá chính là
tên của nút, khóa ngoại là tên của nút cha tham chiếu đến table
cha.
o Tìm trong các Constraint để phát sinh các ràng buộc tương ứng
(Cách tìm các Constraint).
o Đệ quy lại Bước 1 với vai trò nút hiện hành là nút gốc cho đến
khi duyệt hết cây HDM.
Thuật toán sẽ không thực hiện khi cây HDM rỗng. Độ phức tạp của thuật toán là
O(n), trong đó n số phần tử trên cây HDM.
Chèn dữ liệu vào CSDL từ HDM
Khi có cấu trúc và ràng buộc HDM cơ sở, dữ liệu lược đồ cơ sở ít nhiều tương
đương với lược đồ XML đã tạo ra HDM. Ta có thể đưa ra CSDL với dữ liệu lưu trong
các phạm vi của những nút và cạnh HDM. Để làm điều này ta phải dùng câu lệnh insert
để chèn dữ liệu vào bảng mà ta đã tạo ra.
Thuật toán đưa dữ liệu vào Database từ HDM:
- Vào: HDM với phạm vi đầy đủ
- Ra: Các câu lệnh SQL để chèn dữ liệu vào Database
Phương pháp:



78

- Bước 1: Xuất phát từ nút gốc
- Bước 2: Phát sinh câu lệnh insert (SQL) giá trị khóa chính của bảng (table) gốc
với phạm vi của nút gốc.
 Duyệt qua HDM tìm tất cả các con của nút hiện hành (nhờ các cạnh).
 Nếu nút con là nút lá, phát sinh câu lệnh thêm giá trị của trường nút đó
với nội dung là phạm vi đích của cạnh tương ứng.
 Nếu nút con là nút phức hợp :
o Phát sinh câu lệnh chèn giá trị của khóa chính, chính là phạm vi
của nút.
o Phát sinh câu lệnh chèn giá trị khóa ngoại là phạm vi của nút cha
mà nó tham chiếu.
o Đệ quy lại Bước 1 với vai trò nút hiện hành là nút gốc cho đến
khi duyệt hết cây HDM.
Thuật toán sẽ không thực hiện và dừng khi cây HDM không chứa giá trị.
Độ phức tạp của thuật toán là O(n), trong đó n số nút trên cây HDM. Vì số nút
của một cây HDM là hữu hạn nên thuật toán sẽ dừng khi duyệt hết các nút lá. Tính đúng
đắn của thuật toán đã được suy ra từ tính đúng đắn của các thuật toán duyệt cây đã có.
3.2. Chuyển đổi từ CSDL quan hệ sang XML
3.2.1. Tạo một HDM từ một CSDL quan hệ
Với mong muốn lưu trữ dữ liệu vào file XML từ CSDL giống như lưu trữ dữ
liệu vào CSDL từ file XML ta thực hiện biến đổi đảo nghịch. Để thực hiện điều này,
một thành phần của chương trình cần được giải quyết là chuyển đổi từ CSDL đến HDM.
Sự chuyển đổi này chỉ được thực hiện trên các CSDL tương thích với cấu trúc HDM,
chẳng hạn phải có cách để liên kết tất cả các bảng vào trong một cấu trúc đồ hoạ.
Thuật toán tạo HDM từ Database:
- Vào: CSDL quan hệ
- Ra: HDM với các nút, cạnh, ràng buộc có phạm vi đầy đủ
Phương pháp:

- Bước 1: Đọc lược đồ CSDL
- Bước 2: Với mỗi table không chứa bất kỳ cột khóa ngoại nào:
 Thêm vào HDM một nút gốc với tên là tên của table.
 Với mỗi cột của table, thêm vào HDM các nút là con của của nút gốc,
thêm vào cạnh tương ứng từ nút gốc đến nút của cột hiện hành.


79

- Bước 3: Với mỗi table có chứa cột khóa ngoại với table gốc:
 Thêm vào HDM một nút phức hợp với tên là tên của table là con của nút
gốc, thêm cạnh từ nút gốc đến con phức hợp này.
 Đệ quy lại Bước 3 với bảng hiện hành có vai trò là bảng gốc cho đến khi
hết lược đồ CSDL.
- Bước 4: Thêm các ràng buộc kiểu vào HDM dựa vào kiểu của cột dữ liệu.
- Bước 5: Đưa vào phạm vi của nút, cạnh HDM từ các table riêng lẻ. Với mỗi
table:
 Duyệt từng dòng dữ liệu
 Ứng với mỗi dòng:
o Thêm phạm vi của nút trong HDM tương ứng với giá trị của cột
mà nút đó thể hiện
o Thêm phạm vi của cạnh bằng cách lấy giá trị khóa chính với lần
lượt mỗi giá trị trong cột. Phạm vi này được thêm vào cạnh liên
kết nút thể hiện bảng đến nút thể hiện cột.
Độ phức tạp của thuật toán là O(n), trong đó n số các lược đồ quan hệ và các
thuộc tính của CSDL quan hệ. Vì số các thuộc tính trong một lược đồ CSDL là hữu hạn
nên thuật toán sẽ dừng khi duyệt đến thuộc tính cuối cùng.
3.2.2. Tạo tài liệu XML từ đồ thị HDM
Thuật toán chuyển từ HDM vào file XML:
- Vào: HDM với phạm vi đầy đủ

- Ra: Tài liệu XML
Phương pháp:
- Bước 1: Khởi tạo một tài liệu XML.
- Bước 2: Xuất phát từ nút gốc của HDM.
- Bước 3: Thêm một element thể hiện nút gốc vào file XML.
- Bước 4: Tìm tất cả các nút con của nút gốc dựa vào các cạnh mà bắt đầu bằng
phần tử gốc đó.
 Nếu nút con là nút thuộc tính thì thêm vào XML một attribute con của
element gốc ở trên một nút. Giá trị của attribute này chính là phạm vi
của cạnh từ nút cha đến thuộc tính con đó.
 Nút con là nút lá thì xử lý như trường hợp là nút thuộc tính.


80

 Nếu nút con không phải là nút lá, tìm phạm vi của cạnh nối từ nó đến nút
cha. Đối với mỗi nút:
o Mỗi cặp giá trị của cạnh thêm 1 nút vào XML để thể hiện nút con.
o Bất kỳ thuộc tính nào mà thể hiện con thêm vào bằng cách tìm
phạm vi của cạnh từ nút đến thuộc tính con nó đều hình thành từ
trường hợp riêng này.
o Nếu mỗi giá trị tìm thấy trong phạm vi cạnh, tương ứng với giá
trị thể hiện của nó thì thêm vào tài liệu XML.
o Đệ quy lại Bước 2 với nút con đóng vai trò là nút gốc cho đến khi
duyệt hết cây HDM.
o Xuất ra tài liệu XML.
Thuật toán sẽ không thực hiện và dừng khi cây HDM rỗng.
Độ phức tạp của thuật toán là O(n), trong đó n số nút và các giá trị trên đồ thị
HDM. Vì số các nút trên thuộc tính trong đồ thị HDM là hữu hạn nên thuật toán sẽ dừng
khi duyệt đến nút cuối cùng.

4. Kết luận
Bài báo này tập trung vào vấn đề chuyển đổi giữa hai mô hình dữ liệu XML và
quan hệ thông qua mô hình dữ liệu HDM làm trung gian. Chúng tôi đã cài đặt hệ
chuyển đổi này trên ngôn ngữ C# của bộ Microsoft Visual Studio 2005 và hệ quản trị
CSDL SQL 2005. Kết quả chuyển đổi dựa trên các thuật toán đã nêu đã cho độ chính
xác tuyệt đối.
TÀI LIỆU THAM KHẢO
1. Andrew Charles Smith, Translating between XML and Relational Databases using
XML Schema and Automed, Imperial College of Science, Technology and Medicine,
University of London, 2004.
2. Dongwon Lee, Query Relaxation for XML Model, University of California, (2002), 129
- 153.
3. Dongwon Lee, Murali Mani, Frank Chiu, Wesley.W.Chu, NeT & CoT: Translating
Relational Schemas to XML Schemas, 2008.
4. Shiyong Lu, Yezhou Sun, Mustafa Atay, Farshad Fotouhi, A New Inlining Algorithm for
Mapping XML DTDs to Relational Schema, Department Of Computer Science Wayne
State University, Detroit, MI 48202, 2007.



81

CONVERSION TWO DATA MODELS
XML AND RELATIONSHIPS BY HDM TOOL
Nguyen Mau Han
1
, Tran Dinh Toan
2

1

College of Science, Hue University
2
Ho Chi Minh City Unversity of Food Industry

Abstract. Internet satisfies human’s increasing exchange of information.
Information no longer includes only simple messages that must be
extracted from its semantics. The conversion of data models for use on
the Internet environment is of growing concern, particularly in the areas
of electronic commerce and data mining. This paper presents a method of
converting XML data, a language commonly used in web applications, to
a relational database and vice versa using tools HDM (Hypergraph Data Model).

×