1. Trang chủ
  2. » Luận Văn - Báo Cáo

Chuyển đổi dữ liệu giữa XML và cơ sở dữ liệu quan hệ

100 809 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 100
Dung lượng 1,39 MB

Nội dung

Luận văn được trình bày trong 3 chương Chương I: trình bày một số khái niệm cơ bản về XML như định nghĩa DTD, lược đồ XML, trình phân tích tài liệu, mô hình DOM … và mô hình CSDL quan h

Trang 1

CHUYỂN ĐÔI DỮ LIỆU GIỮA XML

VÀ CƠ SỞ DỮ LIỆU QUAN HỆ

Trang 2

DANH MỤC TỪ VIẾT TẮT 2

MỘT SỐ THUẬT NGỮ 3

Mở đầu 4

Chương I: KHÁI NIỆM XML VÀ MÔ HÌNH DỮ LIỆU QUAN HỆ 6

1.1 TÀI LIỆU XML 6

1.1.1 Giới thiệu XML và ngôn ngữ định dạng 6

1.1.2 Trình soạn thảo XML (XML Editors) và trình duyệt XML 10

1.1.3 Bộ phân tích XML và Bộ kiểm tra XML (XML Validator) 10

1.1.4 CSS và XSL 11

1.1.5 Xây dựng tài liệu XML hợp khuôn dạng 11

1.1.6 Định nghĩa kiểu tài liệu (DTD) 12

1.1.7 Giới thiệu về Xpath 13

1.1.8 Mô hình đối tượng dữ liệu DOM 16

1.1.9 XML và cơ sở dữ liệu 17

1.2 MÔ HÌNH DỮ LIỆU QUAN HỆ 18

1.2.1 Các khái niệm cơ bản [3][4][5] 18

1.2.2 Các phép toán trên quan hệ [4][5] 20

1.3 KẾT LUẬN 23

Chương II:THUẬT TOÁN CHUYỂN ĐỔI DỮ LIỆU GIỮA TÀI LIỆU XML VÀ CSDL QUAN HỆ 24 2.1 CHUYỂN ĐỔI XML SANG CSDL QUAN HỆ 24

2.1.1 Đơn giản hoá đặc tả DTD 27

2.1.2 Cơ sở của các thuật toán chuyển đổi lược đồ XML sang lược đồ CSDL quan hệ 28

2.1.3 Thuật toán gộp cơ sở (Basis Inlining) 29

2.1.4 Thuật toán gộp chia sẻ (Shared Inlining) 33

2.1.5 Thuật toán gộp cải tiến 35

2.1.5.1 Đơn giản hoá DTD 36

2.1.5.2 Tạo lập và giản lược đồ thị DTD 37

2.1.5.3 Sinh lược đồ quan hệ 41

2.1.6 Thuật toán Xinsert-Ánh xạ dựa trên hướng tiếo cận DOM 46

2.1.7 Thuật toán CPI (Constraint-Preserving Inlining) 53

2.1.7.1 Ánh xạ DTD sang lược đồ quan hệ 54

2.1.7.2 Các ràng buộc ngữ nghĩa trong DTD 60

2.1.7.3 Phát hiện và bảo toàn các ràng buộc ngữ nghĩa 63

2.2 CHUYỂN ĐỔI CSDL QUAN HỆ SANG XML 69

2.2.1 Chuyển đổi phẳng (Flat Translation) 73

2.2.2 Chuyển đổi lồng(Nesting base Traslation) 74

2.2.3 Thuật toán CoT (Chuyển đổi sử dụng các phụ thuộc bao hàm) 79

2.2.3.1 Một khoá ngoại giữa hai bảng 79

2.2.3.2 Hai khoá ngoại giữa ba bảng 81

2.2.3.3 Lược đồ quan hệ tổng quát 82

Chương III: CHƯƠNG TRÌNH ỨNG DỤNG 88

3.1 THUẬT TOÁN GỘP CẢI TIẾN VÀ XINSERT 88

3.1.1 Mô tả bài toán 88

3.1.2 Chương trình DEMO 90

3.1.3 KẾT LUẬN 94

PHẦN KẾT LUẬN 96

PHỤ LỤC 99

TÀI LIỆU THAM KHẢO 99

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91

92 93 94 95 96 97 98 99 100 99

Trang 3

DANH MỤC TỪ VIẾT TẮT

CSDL Cơ sở dữ liệu

RDB Relational Database

XML eXtensible Markup language

HTML HyperText Markup Language

SGML Standard Generalized Markup Language

DTD Document Type Definition

CSS Cascading Style Sheets

XSl Extensible Style Sheet Language

API Application Progaramming Interfaces

DDL Data definition Language

DML Data Manipulation Language

CPI Constraint- Preserving Inlining

NeT Nesting-base Translation

CoT Constraint Translation

IND Inclusion Defendencies

Trang 4

MỘT SỐ THUẬT NGỮ

Cardinality Operator Toán tử lực lượng

Integrity constraint Rằng buộc toàn vẹn

Set-value attribute Thuộc tính có giá trị tập hợp

Relational recurive processing Tiến trình đệ quy quan hệ

Equality- generating dependencies Phụ thuộc sinh đồng nhất

Trang 5

Mở đầu

Hầu hết các dữ liệu thương mại được lưu trữ và duy trì trong các hệ quản trị dữ liệu quan hệ và được dự báo vẫn là phương thức lưu trữ dữ liệu trong tương lai Các hệ thống này cung cấp cho người

sử dụng cách truy cập dữ liệu hiệu quả và đáng tin cậy trong một tổ chức Tuy nhiên, tốc độ phát triển mạnh mẽ của thương maị điện tử

và nhu cầu chuyển và nhận dữ liệu từ khách hàng cũng như các tổ chức khác qua Internet đồng nghĩa với việc một số dữ liệu cần được giải thoát khỏi mô hình giới hạn này XML[1][2][10] đang nổi lên như một tiêu chuẩn vượt trội để mô tả và trao đổi dữ liệu, do vậy các

cơ chế để chuyển đổi dữ liệu đuợc lưu trữ trong hệ quản trị cơ sở dữ liệu quan hệ sang XML và ngược lại là lĩnh vực quan trọng cần nghiên cứu

Sự thành công của bất kỳ công cụ nào kết nối giữa XML và hệ quản trị

cơ sở dữ liệu quan hệ trực tiếp hay thông qua ngôn ngữ thứ cấp hơn đều phụ thuộc nặng nề vào chất lượng giản đồ định rõ cấu trúc của dữ liệu được chuyển đổi Một giản đồ mơ hồ và chưa hoàn thiện có thế dẫn tới việc kết nối thiếu chính xác hoặc mất dữ liệu Các cơ chế suy luận các giản đồ quan hệ từ các giản đồ không quan hệ đều được chứng minh tốt bằng tài liệu nhưng các phương thức để suy luận một giản đồ XML thì khó hiểu hơn rất nhiều

Cho tới hiện nay, việc chọn lựa một dạng thức để mô tả giản đồ XML còn hết sức khó khăn Gần đây, giản đồ XML nổi lên như một tiêu chuẩn phổ biến nhưng không chính thức để định dạng giản đồ XML Đó là một tiêu chuẩn có ưu thế lớn và toàn diện giúp hỗ trợ các kiểu đánh máy được cài đặt

Trang 6

sẵn phong phú và cho phép tạo ra các kiểu phức tạp hơn dựa trên những kiểu được cài đặt sẵn cũng như nhiều tính năng hữu dụng khác

Luận văn trình bày phương pháp chuyển đổi dữ liệu giữa XML sang cơ

sở dữ liệu quan hệ và ngược lại dựa trên lược đồ XML và lược đồ quan hệ Cụ thể, luận văn đi sâu nghiên cứu một số thuật toán chuyển đổi cơ bản hướng cấu trúc và một thuật toán chuyển đổi hướng dữ liệu Đồng thời, dựa trên các thuật toán cơ bản đó, luận văn nghiên cứu việc chuyển đổi có thể đảm bảo được các ràng buộc, giảm dư thừa dữ liệu, và có thể khai thác tối đa khả năng, lợi ích của hướng tiếp cận này

Luận văn được trình bày trong 3 chương Chương I: trình bày một số khái niệm cơ bản về XML như định nghĩa

DTD, lược đồ XML, trình phân tích tài liệu, mô hình DOM … và mô hình CSDL quan hệ như các khái niệm về quan hệ, thuộc tính, bộ, khoá …

Chương II: Giới thiệu một số thuật toán chuyển đổi dữ liệu giữa XML

và mô hình quan hệ Các thuật toán cơ bản như gộp cơ sở, gộp chia sẻ, gộp cải tiến giửi quyết sự phức tạp của đặc tả DTD, sự xung đột giữa kiến trúc có thứ bậc tự nhiện cảu mô hình dữ liệu XML và bản chất hai mức của mô hình quan

hệ Ba thuật toán CPI, NeT và CoT không chỉ thực hiện tốt việc chuyển đổi cấu trúc của lược đồ gốc mà còn bảo toàn về mặt ngữ nghĩa của lược đồ trong quá trình chuyển đổi Ngoài các thuật toán chuyển đổi lược đồ, luận văn giới thiệu một thuật toán chuyển đổi dữ liệu Xinsert, thuật toán có khả năng chuyển đổi dữ liệu của tài liệu XML sang dữ liệu quan hệ theo hướng tiếp cận DOM

Chương III: Nghiên cứu cài đặt ứng dụng minh hoạ cho một số thuật

toán chuyển đổi dữ liệu như thuật toán gộp cải tiến và Xinsert

Trang 7

Chương I: KHÁI NIỆM XML VÀ MÔ HÌNH DỮ LIỆU

QUAN HỆ

1.1 TÀI LIỆU XML

1.1.1 Giới thiệu XML và ngôn ngữ định dạng

Như tất cả chúng ta đều biết, XML là viết tắt cho chữ eXtensible Markup Language XML là một ngôn ngữ đánh dấu tương đối mới được sử dụng để định nghĩa cấu trúc các dữ liệu trong một tài liêu thông qua các thẻ[1][2]

Ngôn ngữ định dạng (Markup Language) là ngôn ngữ được dùng để trình bày các dữ liệu trong một tài liệu

Ngôn ngữ định dạng mà mọi người quen thuộc ngày nay là ngôn ngữ HTML HTML cho phép bạn tạo nội dung các trang Web tương đối đơn giản

Trang 8

Ở đây HTML thực hiện định dạng bằng các thẻ (tags) như <Head>,

<Center>, <B>… Những thẻ này chỉ cho trình duyệt (browser) cách hiển thị nội dung tài liệu

Giống như HTML, XML dùng các thẻ để khai báo cấu trúc dữ liệu trong file XML Điểm khác biệt chính giữa HTML và XML là trong khi các thẻ HTML chứa ý nghĩa dùng để trình bày dữ liệu thì các thẻ của XML chứa ý nghĩa dùng để định nghĩa cấu trúc dữ liệu Ví dụ một tài liệu đặt hàng (order) XML dưới đây:

Trang 9

Nhìn tổng quát, một tài liệu XML bắt đầu bằng thẻ khái báo chỉ thị xử

lý XML <? Xml version="1.0" encoding="UTF-8" ?> Tất cả các chỉ thị xử lý XML bắt đầu bằng <? Và kết thúc bằng ?>

Chúng ta hãy quan sát kỹ hơn cấu trúc của một tài liệuXML Trước hết tài liệu XML được hình thành từ các phần tử (element) XML và các thuộc tính của các phần tử đó

Trong ví dụ trên ta thấy tài liệu XML gồm có phần tử Order được gọi

là phần tử gốc của tài liệu có thuộc tính OrderNo với giá trị 1023 Bên trong phần tử gốc Order có chứa:

- Phần tử OrderDate với giá trị là:2002-3-27

Trang 10

- Phần tử Customer với giá trị là: Peter Collingwood

- Hai phần tử Item, mỗi phần tử Item lại chứa một phần tử ProductID

và một phần tử Quantity

Đôi khi ta còn khai báo một phần tử rỗng trong tài liệu XML (là phần tử

có tên, nhưng không chứa một giá trị), vì ta muốn dùng nó như một phần tử tuỳ chọn, có cũng được, không có cũng không sao Ví dụ như phẩn tử rỗng MiddleInitial trong phần tử Customer dưới đây:

Trang 11

1.1.2 Trình soạn thảo XML (XML Editors) và trình duyệt XML

Để tạo ra các tài liệu XML ta có thẻ sử dụng các trình soạn thảo đơn giản như: Notepad, wordpad … Có rất nhiều các trình soạn thảo đặc biệt được dùng phục vụ cho hiệu chỉnh nội dung file dữ liệu XML Đơn giản và dễ dùng nhất là trình soạn thảo XML notepad của Microsoft Các trình soạn thảo chuyên nghiệp hơn như XML Writer

Những phần mềm trình duyệt điển hình hỗ trợ XML (chỉ kiểm tra khuôn dạng XML hợp lệ và cho phép kết hợp CSS, XSL) bao gồm: Internet Explorer(IE), Netscape Navigator, Jumpo

1.1.3 Bộ phân tích XML và Bộ kiểm tra XML (XML Validator)

Bộ phân tích là gói phần mềm được sử dụng chúng như một phần mềm kèm theo của ứng dụng có chứa các thư viện cung cấp các hàm, cho phép phân tích nội dung và trích xuất dữ liệu của XML khá đơn giản Dưới đây là các trình phân tích thướng dùng: XML cho Java (XML4J), Microsoft XML Parser, Python XML Parse

Bộ kiểm tra là các gói phần mềm cho phép kiểm tra một số chuẩn trên XML Một số bộ kiểm tra thường dùng, nếu sử dụng bộ phân tích XML4J của IBM, bạn có thể dùng đối tượng DOM Writer để làm bộ kiểm tra, ngoài ra còn

có các bộ kiểm tra như XML Writer, Tidy, …

Trang 12

1.1.4 CSS và XSL

CSS và XSL [8] là các bảng định kiểu (Style sheet) CSS thích hợp để định dạng tài liệu hướng về HTML, ta có thể thay đổi font chữ, cỡ chữ, màu sắc, đặt hình ảnh và yêu cầu kết hợp định dạng của CSS với dữ liệu XML Bản thân XML chỉ định nghĩa các cấu trúc lưu trữ dữ liệu, nó không có khả năng tự hiển thị và trình diễn nội dung tài liệu CSS trích rút dữ liệu từ XML và đặt vào bảng định kiểu tạo thành một phiên bản trình diễn sau cùng tựa HTML

XSL là một cách khác để hiển thị XML XSL (Extensible Style Language) là ngôn ngữ định kiểu mở rộng dựa trên cú pháp và nguyên tắc cấu thành của XML XSL cho phép xử lý và trình diễn dữ liệu mạnh hơn CSS XSL là ngôn ngữ định kiểu có khả năng điều khiển động các phần tử thẻ và dữ liệu cần định dạng XSL có thể sắp xếp lại các thẻ trong tài liệu, thay đổi cả nội dung thẻ, hiển thị một phần hay toàn bộ nội dung dữ liệu

1.1.5 Xây dựng tài liệu XML hợp khuôn dạng

Với XML bạn tự định nghĩa thẻ và tuỳ ý quyết định mục đích sử dụng của thẻ Mặc dù được tự do định nghĩa, nhưng các thẻ XML cần theo một quy tắc định nghĩa bắt buộc Nếu bạn không theo những quy tắc này khi định nghĩa thẻ, các bộ phân tích cú pháp XML sẽ không xác định được tài liệu của bạn

Nói chung, khi xây dựng tài liệu XML bạn phải tuân theo đúng cú pháp khi khai báo thẻ XML và tuân theo cách đặt các thẻ XML theo một trật tự có thể phân tích được bởi các bộ phân tích

Các qui tắc cần tuân theo để xây dựng một tài liệu XML hợp khuôn dạng:

- Các khai báo được đặt ở dòng đầu tiên của tài liệu

- Tài liệu XML chỉ có một phần tử gốc, các phần tử khác nếu có, phải là con của phần tử gốc

Trang 13

- Mội phần tử XML khác rỗng phải bao gồm đầy đủ thẻ đóng và thẻ mở

- Đóng phần tử rỗng với chuỗi đóng />: Phần tử rỗng là phần tử chỉ có một thẻ

- Mọi phần tử trong tài liệu XML khác phần tử gốc đều phải nằm giữa cặp thẻ gốc

- Các phần tử lồng nhau phải có thẻ đống, thẻ mở hợp vị trí: thẻ nào mở trước thì đống sau

- Sử dụng tên thuộc tính là duy nhất: bạn không được đặt trong thẻ các thuộc tính trùng tên

- Chỉ nên sử dụng 5 tham chiếu thực thể được định nghĩa trước:

&amp;để chỉ &, &lt;để chỉ <, &gt;để chỉ >…

- Bọc các giá trị thuộc tính bằng cặp dấu nháy kép hoặc nháy đơn

- Chỉ nên sử dụng ký tự < và & đối với thẻ mở và các thực thể

1.1.6 Định nghĩa kiểu tài liệu (DTD)

Một định nghĩa kiểu tài liệu (DTD - Document Type Definition) [1][2]

là một bộ những qui tắc cú pháp cho các nhãn Nó cho bạn biết những nhãn nào bạn có thể sử dụng trong một tài liệu, chúng nên được xếp theo thứ tự nào, những nhãn nào có thể xuất hiện bên trong các nhãn khác, những nhãn nào có các thuộc tính, Nguồn gốc được phát triển cho việc sử dụng với SGML, một DTD có thể là một bộ phận của một lài liệu XML, nhưng thường nó là một tài liệu riêng biệt hoặc một loạt các tài liệu

Bởi vì bản thân XML không phải là một ngôn ngữ, mà là một hệ thống cho việc định nghĩa các ngôn ngữ, cho nên nó không có một DTD chung như trong HTML Thay vào đó, mỗi tổ chức hoặc công nghệ muốn dùng XML cho việc trao đổi dữ liệu đều có thể định nghĩa nên những DTD sở hữu riêng Nếu

Trang 14

một tổ chức dùng XMT để gán nhãn các tài liệu chỉ cho việc sử dụng nội bộ, thì có thể tạo nên DTD riêng cho mình

1.1.7 Giới thiệu về Xpath

Chúng ta đã thấy cấu trúc và cú pháp của XML tương đối đơn giản XML cho ta một cách chuẩn để trao đổi tin tức giữa các máy tính Bước tiếp theo là tìm hiểu cách nào một chương trình xử lý một tài liệu XML

Dĩ nhiên, để xử lý một tài liệu XML chương trình ứng dụng phải có cách tham chiếu đến tài liệu để lấy ra giá trị của các phần tử hay thuộc tính Do

đó người ta thiết kế ra ngôn ngữ XML Path language, mà ta gọi tắt là XPath XPath đóng một vai trò quan trọng trong công tác trao đổi dữ liệu giữa các máy tính hay giữa các chương trình ứng dụng vì nó cho phép ta lựa chọn hay sàng lọc ra những tin tức nào mình muốn để trao đổi hay hiển thị

Xpath [8] là một chuẩn để xử lý XML, cũng giống như SQL là một ngôn ngữ chuẩn để làm việc với cơ sở dữ liệu Tiên phong trong việc triển khai các chương trình áp dụng XPath là công tác của các công ty phần mềm lớn như Microsoft, Oracle, Sun, IBM, v.v Sở dĩ ta cần có một chuẩn XPath là vì

nó được áp dụng trong nhiều hoàn cảnh, nên cần phải có một lý thuyết rõ ràng, chính xác

XPath cho ta cú pháp để diễn tả cách tham chiếu đường dẫn trong tài liệu XML Ta coi mỗi tài liệu XML được biểu diễn bằng một cây có nhiều nút Mỗi phần tử hay thuộc tính là một nút

Ví dụ 1.6

<?xml version="1.0"?>

<Order OrderNo="1047">

<OrderDate>2002-03-26</OrderDate>

Trang 16

Bạn có thể dùng biểu thức XPath để chỉ định đường dẫn đến nút nào hay trích ra một hay nhiều nút thỏa mãn điều kiện yêu cầu Biểu thức XPath có thể là tuyệt đối, tức là lấy nút gốc làm chuẩn hay tương đối, tức là khởi đầu từ nút vừa mới được chọn

Tài liệu XML thường có một phần tử gốc Mọi phần tử con đều nằm bên trong phần tử gốc Để tham chiếu đến một nút dữ liệu trong tài liệu XML bạn chỉ ra đường dẫn tương tự như đường dẫn thư mục

Trang 17

1.1.8 Mô hình đối tƣợng dữ liệu DOM

Để xử lý, W3C định nghĩa tài liệu XML theo mô hình đối tượng tài liệu DOM (Document Object Model ) Theo nmô hình này, tài liệu XML là một cây gồm nhiều nút Những nút này nội dung có thể chứa phần tử, dữ liệu, thuộc tính … và các nút con khác Mô hình DOM có các loại nút sau đây trong

Processing Instruction Chỉ thị xử lý

- Cấp độ 0: Bao gồm mọi chi tiết DOM theo qui định của từng nhà phát triển riêng biệt tồn tại trước khi DOM cấp độ 1 ra đời Ví dụ: document.images, document.forms, document.layers, và document.all Chú ý:

Trang 18

đây là mô tả chi tiết kĩ thuật chính thức bởi W3C hơn là một tham khảo đến những thứ tồn tại trước khi xảy ra quá trình chuẩn hóa

- Cấp độ 1: Cách duyệt qua tài liệu (cấu trúc cây) của DOM (HTML và XML) và thao tác nội dung (bao gồm việc thêm thành phần) Các thành phần riêng cho HTML cũng được đưa vào

- Cấp độ 2: Hỗ trợ không gian tên XML, khung nhìn có lọc (filtered views) và các sự kiện DOM

- Cấp độ 3: Nhằm năng cao các khả năng của DOM, cấp độ 3 chứa 6 bản mô tả chi tiết kĩ thuật khác nhau: 1) the DOM Level 3 Core; 2) the DOM Level 3 Load and Save; 3) the DOM Level 3 XPath; 4) the DOM Level 3 Views and Formatting; 5) DOM Level 3 Requirements; and 6) the DOM Level

3 Validation

1.1.9 XML và cơ sở dữ liệu

Nhìn chung XML và CSDL là những công nghệ lấy dữ liệu làm trung tâm XML thích hợp cho việc truyền thông dữ liệu, trong khi đó cơ sở dữ liệu thích hợp cho việc lưu trữ và truy vấn dữ liệu Do đó nếu kết hợp giữa những

ưu điểm của hai công nghệ này sẽ phát huy được thế mạnh của cả XML và CSDL

Với một ứng dụng thương mại điện tử, XML được dùng như là một phương thức truyền thông dữ liệu tốt nhất Nhiệm vụ quan trọng của ứng dụng này là phải lưu trữ dữ liệu XML vào CSDL quan hệ Do đó cần một phần mềm chuyển đổi dữ liệu từ tài liệu XML vào CSDL hay xuất dữ liệu dưới dạng XML

Mặt khác, nhiệm vụ chủ yếu của dữ liêu Web la giúp tìm kiếm nội dung trên trang Web thật hiệu quả Do đó, các thực thể, các thành phần tạo nên cấu trúc của tài liệu XML rất quan trọng bởi nó trở thành những phần chủ yếu của

Trang 19

tài liệu phục vụ cho việc tìm kiếm, hệ thống có thể duy trì được cấu trúc tài liệu, đáp ứng được những giao dịch và xử lý những câu truy vấn XML

1.2 MÔ HÌNH DỮ LIỆU QUAN HỆ

1.2.1 Các khái niệm cơ bản [3][4][5]

1.2.1.2 Hệ quản trị cơ sở dữ liệu

Là một hệ thống phần mềm cung cấp cho người dùng một môi trường làm việc vừa thích hợp vừa hiệu quả để khai thác CSDL theo các chức năng

mô tả, lưu trữ, tìm kiếm và cập nhật dữ liệu

Tất cả các truy cập đến CSDL đều thông qua hệ quản trị CSDL Hệ quản trị CSDL cung cấp một ngôn ngữ định nghĩa dữ liệu (DDL) và một ngôn ngữ thao tác dữ liệu (DML) để người dùng định nghĩa CSDL và có thể thêm, xoá, sửa hay truy xuất vào CSDL

1.2.1.3 Mô hình quan hệ

Biểu diễn dữ liệu trong một CSDL như một tập các quan hệ Một cách không hình thức, mỗi quan hệ là một bảng giá trị gồm các hàng và các cột Mỗi phần tử của quan hệ được gọi là bộ Mỗi hàng là một tập các giá trị có liên quan đến nhau, tương ứng với một bộ Cột tương ứng với thuộc tính, mọi giá trị trong cột thường có cùng kiểu dữ liệu

Ví dụ 1.7

Trang 20

Quan hệ nhân viên được thể hiện qua bảng sau

1.2.1.6 Khoá của quan hệ

Khoá của quan hệ r trên tập thuộc tính R = {A1,A2,…,An} là tập con

K R sao cho bất kỳ hai bộ khác nhau t1,t2r luôn thoả mãn t1(K) t2(K), bất kỳ tập con thực sự K‟ K nào đó đều không có tính chất đó

Ví dụ 1.8

Trang 21

Xét quan hệ nhân viên ở trên, khóa của quan hệ là Masonv Khoá ngoài của một quan hệ là một tập hợp gồm một hay nhiều thuộc tính là khoá của một quan hệ khác

1.2.1.7 Ràng buộc toàn vẹn

Khi định nghĩa một quan hệ chỉ với danh sách các thuộc tính thì chưa

đủ, ta phải kết hợp vào quan hệ một tập các ràng buộc toàn vẹn trên các giá trị của thuộc tính Tập ràng buộc này sẽ được kiểm tra trên từng bộ trước khi kiểm tra trên toàn quan hệ Các thao tác cập nhật cũng bị kiểm tra chặt chẽ bởi các ràng buộc này Ví dụ, ràng buộc về khoá nghĩa là mỗi giá trị khoá đặc tả một bộ duy nhất trong quan hệ, ràng buộc về trị thì khoá chính hoặc tập con của nó không được mang giá trị null, ràng buộc về tính duy nhất của thuộc tính, ràng buộc về khoá ngoài … [5]

1.2.1.8 Các thao tác cập nhật dữ liệu

Là các phép toán làm CSDL thay đổi như phép thêm bộ dùng để thêm các bộ vào quan hệ, phép xoá để loại bỏ các bộ nào đó ra khỏi quan hệ, phép sửa nhằm thay đổi một số giá trị của các bộ đang tồn tại trong quan hệ Vì vậy, một số ràng buộc trên lược đồ CSDL có thể bị vi phạm khi thực hiện một phép toán cập nhật

1.2.2 Các phép toán trên quan hệ [4][5]

1.2.2.1 Các phép toán tập hợp

Các phép toán tập hợp bao gồm các phép hợp, phép giao , phép trừ, tính Decac và phép chia Các phép toán này bắt nguồn từ cách nhìn mỗi quan hệ là một tập hợp các bộ và cần phải có điều kiện đảm bảo rằng quan hệ kết quả của các phép toán phải là một quan hệ khả hợp Hai quan hệ được gọi là khả hợp nếu chúng cùng bậc và thuộc tính thứ i của quan hệ này có miền trùng với

Trang 22

miền của thuộc tính thứ i của quan hệ kia Thứ tự của các thuộc tính phải được tôn trọng khu thực hiện phép toán

Giả sử r là quan hệ xác định trên tập thuộc tính  = { A1, A2,…,An }, và

r là tập hữu hạn các bộ

a Phép hợp: Là một quan hệ gồm tất cả các bộ thuộc r hoặc thuộc s

hoặc thuộc cả hai quan hệ Ký hiệu là r  s,

r  s = {t t  r hoặc t  s hoặc t  r và s }

b Phép giao: Là một quan hệ gồm tất cả các bộ đồng thời thuộc cả r và

s Ký hiệu là r  s, biểu diễn hình thức phép giao có dạng:

r  s ={t t  r và t  s }

c Phép trừ: Là một quan hệ gồm tất cả các bộ thuộc r nhưng khong

thuộc s, ký hiệu là r - s, biểu diễn hình thức phép trừ có dạng:

r – s = { t  t  r và t  s }

d Phép tích Decac: Gọi r là một quan hệ của lược đồ R(A1, A2, ….,

An), s là một quan hệ của lược đồ S(B1, B2, …., Bm) Tích Descartes của r và s được ký hiệu là r x s, là tập (n + m)_ bộ sao cho mỗi bộ này có n thành phần đầu làm thành một bộ r và m thành phần sau làm thành một bộ thuộc s Biểu diễn hình thức có dạng:

r  s = { t  t = (a1, a2, …, an, b1, b2, …, bm), (a1, a2, …, an)  r và (b1, b2, …, bm)  s}

e Phép chia: Gọi r là một quan hệ của lược đồ R(A1, A2, …., Am, Am+1,

A2, …., An), s là một quan hệ của lược đồ S(A1, A2, …., Am) Kết quả của phép chia hai quan hệ r và s được ký hiệu là r s, là tập các (n-m)_ bộ sao cho mỗi

bộ này khi được ghép với một bộ bất kỳ trong quan hệ s cho một bộ trong quan

hệ r Biểu diễn hình thức có dạng:

Trang 23

r  s = { t  t = (am +1,am +2,…,an) :  (a1,a2, , am)  s và (a1,a2, …,am, am+1,…,an)  r }

1.2.2.2 Các phép toán đặc biệt trên quan hệ

Các phép toán đặc biệt trên quan hệ là một cách tiếp cận khác trong việc biểu diễn câu hỏi của ngôn ngữ quan hệ Chúng liên quan chặt chẽ đến các thao tác cơ bản làm thay đổi quan hệ như thêm, sửa, xoá

a Phép chọn: dùng để xây dựng một tập con các bộ của một quan hệ

đã cho, các bộ này phải thoả mãn điều kiện chọn C Điều kiện chọn là một tổ hợp Boolean của các toán hạng, mỗi toán hạng là một phép so sánh đơn giản giữa hai biến là hai thuộc tính hoặc một biến là thuộc tính và một hằng Biểu thức logic C này sẽ cho giá trị TRUE/FASLE đối với mỗi bộ kiểm tra Hình thức hoá phép chọn được viết như sau:

 c (r) = { t  t  r, C (t)= TRUE}

Trong đó, C(t) là giá trị của các thuộc tính xuất hiện trong biểu thức C tại bội t

b Phép chiếu: Phép chiếu một quan hệ r trên tập thuộc tính X của r

dùng để xây dựng quan hệ mới từ quan hệ r đã cho bằng cách loại bỏ đi một

số thuộc tính của quan hệ đó Những thuộc tính bị loại bỏ là những thuộc tính không thuộc tập hợp X Kết quả phép chiếu một quan hệ r trên tập thuộc tính

X được ký hiệu X (r)

Giả sử r là quan hệ trên lược đồ R (), t  r, t [ A] là giá trị bộ t tại thuộc tính A, A  , với X= {A1, A2, …, Am} thì t[X] = (t[A1], t[A2], …, t[Am])

x(r) = { t[X]  t r}

Trang 24

Trong thực tế , người ta kết hợp phép chọn và phép chiếu để thu gọn trên một số cột, một số hàng

c Phép kết nối : Cho r là một quan hệ xác định trên tập thuộc tính {

A1,A2,…An}, s là một quan hệ xác định trên tập thuộc tính {B1,B2,….Bn} và 

là một trong các phép so sánh: = ,>,<, , ,  Kết quả của phép kết nối quan

hệ r với quan hệ s theo điều kiện Ai  Bj được ký hiệu r Ai  Bj s và được xác định như sau:

r Ai  Bj s = {(t,u)  t r,u s và t[Ai]  u[Bj]}

1.3 KẾT LUẬN

Nội dung chương I đã giới thiệu những khái niệm cơ bản về XML và

mô hình CSDL quan hệ Trong đó, định nghĩa kiểu tài liệu DTD giữ vai trò rất quan trọng trong quá trình chuyển đổi DTD đặc tả một tài liệu XML phức tạp bằng các phần tử, toán tử, thuộc tính, từ khoá… Đồng thời mô hình CSDL quan hệ đã dùng các khái niệm bảng, thuộc tính, khoá chính, khoá ngoại, ràng buộc toàn vẹn, … Để mô tả dữ liệu trong thế giới thực.Sự khác biệt giữa hai

mô hình này là vấn đề trọng tâm trong quá trình chuyển đổi dữ liệu qua lại giữa hai mô hình, và vấn đề đó cần được giải quyết tốt bằng các thuật toán Do

đó, chương II sẽ trình bày những thuật toán có thể giải quyết được vấn đề trọng tâm của việc chuyển đổi dữ liệu giữa XML và mô hình quan hệ

Trang 25

Chương II: THUẬT TOÁN CHUYỂN ĐỔI DỮ LIỆU GIỮA TÀI

LIỆU XML VÀ CSDL QUAN HỆ

Rất nhiều các công cụ đang tồn tại có thể chuyển đổi dữ liệu giữa XML

và CSDL quan hệ Trong chương này sẽ giới thiệu một số thuật toán chuyển đổi từ tài liệu XML (tương ứng là các DTD) sang CSDL quan hệ và ba thuật toán chuyển đổi từ CSDL quan hệ sang tài liệu XML Các thuật toán này chủ yếu tập trung giải quyết các vấn đề về cấu trúc và một số các ràng buộc ngữ nghĩa của lược đồ gốc

2.1 CHUYỂN ĐỔI XML SANG CSDL QUAN HỆ

Quá trình chuyển đổi tài liệu XML sang RDB bao gồm các vấn đề sau:

- Ánh xạ mô hình: Là sinh ra lược đồ quan hệ tương ứng từ dữ liệu

DTD Thay vì ứng với mỗi phần tử thẻ XML sẽ sinh ra một bảng quan hệ(Theo thuật toán gộp cơ sở) thì ta sẽ gộp nhiều phần tử XML vào một bảng

để giảm đi số bảng được sinh ra và giảm cả chi phí kết nối các bảng lại với

Trang 26

nhau Đây là giai đoạn quan trọng nhất cần có những xử lý phức tạp nhờ các thuật toán và cũng là phần trọng tâm nghiên cứu của luận văn

- Ánh xạ dữ liệu: Là cắt nhỏ và sắp xếp dữ liệu XML thành những bộ

có quan hẹ và chèn chúng vào cơ sở dữ liệu quan hệ (thuật toán XInsert)

- Ánh xạ truy vấn: Là chuyển câu truy vấn XML thành câu truy vấn

SQL

- Ánh xạ kết quả: Kết quả truy vấn cần phải được định dạng lại thành

dữ liệu có cấu trúc XML

Một số khó khăn thường gặp khi lưu trữ tài liệu XML vào RDB là:

- Sự phức tạp của các đặc tả DTD: Hầu hết các vấn đề phức tạp của

đặc tả DTD đề xuất phát từ các toán tử mô tả kiểu phần tử Chẳng hạn, một phần tử sau đây được xem là phức tạp:

Ví dụ 2.1: <!ELEMENT a((b|c|e)?,(e?|f?,(b,b)*))*)>

Trong đó a,b,c,d,e,f là các phần tử khác nhau

Đối với các DTD phức tạp, lược đồ quan hệ được sinh ra sẽ rất cồng kềnh bởi phải mô tả thêm sự phức tạp của lược đồ gốc Để giải quyết được vấn

đề này, ta cần phải thực hiện thao tác đơn giản hoá sự phức tạp của các DTD trước khi sinh lược đồ quan hệ

-Sự xung đột giữa kiến trúc có thứ bậc tự nhiên của mô hình dữ

liệu XML và bản chất hai mức của mô hình quan hệ (Bảng và thuộc tính):

Đối với mô hình quan hệ và mô hình thực thể quan hệ (ER), ta thấy có sự tương ứng giữa quan hệ và các thuộc tính của quan hệ với thực thể Do đó, mỗi thực thể và các thuộc tính của nó có thể ánh xạ sang một quan hệ Tuy nhiên với các đặc tả DTD thì chưa có sự tương ứng đó

Ví dụ 2.2:

Trang 27

<!ELEMENT author (name, address)>

<!ELEMENT name (firstname?,lastname)>

<!ELEMENT firstname (#PCDATA)>

<!ELEMENT lastname (#PCDATA)>

<!ELEMENT address ANY>

Giả sử khi chuyển XML DTD này sang các quan hệ, ta ánh xạ mỗi phần

tử trong DTD sang một quan hệ và ánh xạ các thuộc tính của phần tử sang các thuộc tính của quan hệ Như vậy, DTD trên sẽ sinh ra 5 quan hệ: author, name, firstname, lastname, address Điều này dẫn đến dư thừa dữ liệu do tài liệu bị phân mảnh quá nhiều

Nếu xét trong mô hình thực thể quan hệ (ER) thì author là một thực thể; firstname, lastname, address là các thuộc tínhcủa thực thể Nhưng khi thiết kế một DTD, nếu ta thiết kế author là phần tử và firstname, lastname, address là các thuộc tính của phần tử author thì các thuộc tính này không được lồng trong name bởi vì các thuộc tính không có cấu trúc lồng Do đó, DTD không mô tả được kiến trúc có thứ bậc của DTD như mong muốn Đối với từng thuật toán khác nhau sẽ có hướng giải quyết về vấn đề này khác nhau

-Vấn đề đệ qui và thuộc tính có giá trị tập hợp

Ví dụ 2.3: Xét DTD như sau:

<!ELEMENT book(booktitle,author)

<!ELEMENT article(title,author*,contactauthor)>

<!ELEMENT contactauthor EMPTY>

<!ATTLIST contactauthor authorID IDREF IMPLIED>

<!ELEMENT monograph(title,author,editor)>

Trang 28

<!ELEMENT editor(monograph*)>

<!ATTLIST editor name CDATA #REQUIRED>

<!ELEMENT author(name, address)>

<!ATTLIST author id ID #REQUIRED>

<!ELEMENT name(firstname?,lastname)>

<!ELEMENT firstname(#PCDATA)>

<!ELEMENT lastname(#PCDATA)>

<!ELEMENT address(ANY)>

Theo mô tả DTD trên, phần tử article chứa phần tử author với toán tử

“*” , nghĩa là với mỗi phần tử article có thể chứa nhiều phần tử con author Nếu tạo ra một quan hệ article thì ta không thể gộp các author lại thành một tạp hợp các author để xem nó là thuộc tính của quan hệ Bởi vì mô hình quan hệ truyền thống không hỗ trợ thuộc tính có giá trị tập hợp Do đó chúng ta phải tuân theo chuẩn lưu trữ tập hợp trong hệ quản trị cơ sở dữ liệu quan hệ bằng cách tạo ra một quan hệ riêng cho author và kết nối author với article thông qua khoá ngoài

Vấn đề đệ qui được chỉ ra bởi 2 phần tử monograph và editor Mỗi phần tử monograph chứa một editor, đồng thời mỗi editor có thể chứa nhiều monograph Đây là một sự định nghĩa đệ qui lẫn nhau Để giảm bớt sự phức tạp này, chúng ta biểu diễn quan hệ đệ qui bằng khái niệm khoá quan hệ(reletional keys) và tiến trình đệ qui quan hệ(reletional recursive processing)

2.1.1 Đơn giản hoá đặc tả DTD

Việc đơn giản hoá đặc tả DTD có thể được thực hiện bởi việc áp dụng các qui tắc sau đây:

Trang 29

- Chuyển đổi phẳng: Chuyển một biểu diễn lồng sang một biểu diễn

Sau khi đơn giản hoá bằng các qui tắc trên, đặc tả phức tạp ở ví dụ 2.1

có kết quả như sau:

Đặc tả ban đầu: <!ELEMENT a((b|c|e)?,(e?|f?,(b,b)*))*)>

Đặc tả sau khi đơn giản hoá: <!ELEMENT a(b*,c?,e*,f*)>

2.1.2 Cơ sở của các thuật toán chuyển đổi lƣợc đồ XML sang lƣợc

đồ CSDL quan hệ

Theo khái niệm truyền thồng, lược đồ quan hệ được chia nhỏ thành các

mô hình dữ liệu như mô hình quan hệ thực thể Quá trình chuyển đổi giữa các lược đồ sẽ trở nên đơn giản nếu ta xác định được thực thể và các thuộc tính của

nó Mỗi thực thể và thuộc tính của nó sẽ được ánh xạ bởi một mối quan hệ khi chuyển đổi tài liệu XML DTD sang cơ sở dữ liệu quan hệ, ta tiến hành ánh xạ mỗi thành phần trong đặc tả DTD thành quan hệ và ánh xạ thuộc tính của

Trang 30

thành phần trong DTD thành thuộc tính của quan hệ Tuy nhiên không có sự tương ứng giữa thành phần và thuộc tính của DTD với thực thể và thuộc tính trong mô hình quan hệ thực thể Như trong ví dụ 2.3, trong mô hình quan hệ thực thể ể author là một thực thể và firstname, lastname và address là các thuộc tính của thực thể Trong thiết kết DTD không nhất thiết author là một phần tử(elememt) và firstname, lastname, address là thuộc tính Thực tế, trong XML, firstname, lastname, address là các phần tử vì nếu chúng là thuộc tính thì các thuộc tính này không được lồng trong name bởi vì các thuộc tính không

có cấu trúc lồng Cho nên việc ánh xạ các phần tử (element) thành quan hệ phải được hướng dẫn bởi sự phân mảnh tài liệu

2.1.3 Thuật toán gộp cơ sở (Basis Inlining)

Thuật toán gộp cơ sở giải quyết vấn đề phân mảnh bằng cách gộp hậu duệ của một phần tử vào một quan hệ đơn dựa trên đồ thị DTD [7] Đồ thị DTD biểu diễn cấu trúc của một DTD Các nút của đồ thị là những phần tử, thuộc tính và các toán tử trong DTD Mỗi phần tử xuất hiện trong đồ thị đúng một lần Các thuộc tính và các toán tử có thể xuất hiện nhiều lần Quan hệ đệ qui đwocj biểu diễn bởi chu trình trong đồ thị Đồ thị DTD tương ứng với ví

dụ 2.3 được biểu diến như sau:

Trang 31

Hình 2.1: Đồ thị DTD

Thuật toán gộp cơ sở tạo ra đồ thị phần tử để xử lý các phần tử đặc biệt

và sinh tập các quan hệ cho phần tử đặc biệt này Đồ thị phần tử được xây dựng như sau:

-Trên đồ thị DTD, ta tiến hành duyệt theo chiều sâu bắt đầu từ nút phần

tử mà ta muốn xây dựng quan hệ Mỗi nút được đánh dấu là “visited” ở lần đầu tiên được xét và bỏ đánh dấu khi tất cả các con của nó được duyệt qua

-Trong quá trình duyệt theo chiều sâu trên đồ thị DTD, nếu gặp một nút chưa được đánh dấu thì ta ta tạo ra một nút mới trên đồ thị phần tử có cùng tên với nút vừa gặp Đồng thời, một cung có hướng được tạo ra trên đồ thị phần tử

để nối từ nút được tạo ra trước đó với nút mới sinh (tương ứng quan hệ cha con trong đồ thị DTD) Nếu duyệt đến một nút đã được đánh dấu rồi (kể cả nuúut

đã được đánh dấu một lần và được xoá đánh dấu sau khi duyệt qua tất cả các con) thì một cạnh có hướng lại được sinh ra trên đồ thị phần tử để nối từ nút

Trang 32

mới được tạo ra gần nhất tới nút có cùng tên với nút đang xét trong đồ thị DTD

Ví dụ 2.4: Xây dựng đồ thị phần tử cho editor trong đồ thị DTD ở hình

2.4 Ta thấy đồ thị phần tử kết quả là một cấu trúc cây được mở rộng bởi những phần có liên quan trong đồ thị DTD

Hình 2.2: Đồ thị phần tử editor

Khi có một đồ thị phần tử, ta tiến hành tạo ra các quan hệ như sau: Đầu tiên ta tạo ra một quan hệ cho phần tử gốc của đồ thị Tất cảc các hậu duệ của phần tử gốc được gộp vào trong quan hệ đó ngoại trừ hai trường hợp sau:

Trang 33

1)Nếu một phần tử là con trực tiếp của một nút “*” thì ta sẽ tạo một quan hệ riêng biệt, nghĩa là ta đang tạo một quan hệ mới cho phần tử con có giá trị tập hợp

2) Nút có cạnh chỉ ngược về chính nó thì phải tạo một quan hệ riêng biệt, tương ứng với việc tạo ra một quan hệ mới để quản lý sự đệ qui

Các thuộc tính trong quan hệ (Hình 2.6) được đặt tên bởi đường dẫn từ phần tử gốc của quan hệ Mỗi quan hệ có một trường ID làm khoá Các quan

hệ của 2 trường hợp đặc biệt (phần tử có giá trị tập hợp và đệ qui) sẽ có thêm trường parentID Trường này có tác dụng như một khoá ngoài để chỉ đến quan

hệ cha

book (bookID: integer, book.booktitle : string, book.author.name.firstname:

string, book.author.name.lastname: string,

book.author.address: string, author.authorid: string)

booktitle (booktitleID: integer, booktitle: string)

article (articleID: integer, article.contactauthor.authorid: string, article.title:

monograph (monographID: integer, monograph.parentID: integer,

monograph.title: string, monograph.editor.name: string,

monograph.author.name.firstname: string, monograph.author.name.lastname: string,

monograph.author.address: string, monograph.author.authorid: string)

editor (editorID: integer, editor.parentID: integer, editor.name: string)

editor.monograph (editor.monographID: integer,

editor.monograph.parentID: integer, editor.monograph.title: string,

editor.monograph.author.name.firstname: string,

editor.monograph.author.name.lastname: string,

editor.monograph.author.address: string, editor.monograph.author.authorid: string)

Trang 34

author (authorID: integer, author.name.firstname: string,

author.name.lastname: string, author.address: string,

author.authorid: string)

name (nameID: integer, name.firstname: string, name.lastname: string)

firstname (firstnameID: integer, firstname: string)

lastname (lastnameID: integer, lastname: string)

address (addressID: integer, address: string)

Bảng 2.4: Lược đồ quan hệ được sinh ra từ các DTD ở ví dụ 2.3

Thuật toán gộp cơ sở ánh xạ mỗi phần tử hay thuộc tính sang một quan

hệ nên quá trình ánh xạ đơn giản và dễ thực hiện Đồng thời, nó đã xử lý được vấn đề đệ qui trong khi chuyển đổi Tuy nhiên, nhược điểm của thuật toán gộp

cơ sở là tạo ra số lượng các quan hệ quá lớn và kém hiệu quả đối với một số truy vấn do phải kết hợp quá nhiều bảng

2.1.4 Thuật toán gộp chia sẻ (Shared Inlining)

Thuật toán gộp chia sẻ khắc phục được nhược điểm của thuật toán gộp

cơ sở bằng cách tạo ra quan hệ riêng biệt cho các phần tử chung [7]

Đầu tiên, thuật toán gộp chia sẻ tạo quan hệ cho tất cả các phần tử có bậc lớn hơn 1 trong đồ thị DTD (trong thuật toán gôp cơ sở các nút này được biểu diễn bởi nhiều quan hệ) Các nút có bậc 1 thì gộp lại Các nút có bậc 0 cũng được tạo quan hệ riêng biệt bởi vì không có nút nào đi tới nó

Đối với những phần tử đệ qui lẫn nhau mà tất cả chúng có bậc 1 thì một trong những phần tử đó sẽ được tạo một quan hệ riêng, chẳng hạn như các thành phần liên thông mạnh trong đồ thị DTD Nếu mỗi nút X là một quan hệ riêng thì gộp tất cả các nút Y chỉ có duy nhất cung trực tiếp từ X đến Y vào quan hệ X

Bảng 2.5 đưa ra lược đồ quan hệ từ đồ thị DTD ở hình 2.1 với số quan

hệ nhỏ hơn rất nhiều so với lược đồ kết quả của thuật toán gộp cơ sở

Trang 35

book (bookID: integer, book.booktitle.isroot: boolean, book.booktitle :

string, author.name.firstname: string,

author.name.lastname: string, author.address: string, author.authorid: string)

article (articleID: integer, article.contactauthor.isroot: boolean,

article.contactauthor.authorid: string,

article.title.isroot: boolean, article.title: string)

monograph (monographID: integer, monograph.parentID: integer,

author (authorID: integer, author.parentID: integer, author.parentCODE:

integer, author.name.isroot: boolean,

author.name.firstname.isroot: boolean, author.name.firstname: string,

author.name.lastname.isroot: boolean,

author.name.lastname: string, author.address.isroot: boolean, author.address: string, author.authorid: string)

Bảng 2.5: Lược đồ quan hệ được sinh bởi thuật toán gộp chia sẻ

Việc gộp phần tử Y vào một quan hệ X sẽ gây ra nhiều vấn đề khó khăn khi gốc của tài liệu XML được đặt tại Y Để truy vấn được dễ dàng trên các phần tử như thế ta phải tạo thêm các trường isRoot Các quan hệ không có cha thì sẽ không có trường parentID và parentCODE

Mặc dù còn một số lỗi nhưng thuật toán gộp chia sẻ được đánh giá cao hơn các chiến lược khác trong việc hiển thị dữ liệu, thực hiện tốt trên các tập

dữ liệu khác nhau và các truy vấn khác nhau khi DTD sẵn có Bên cạnh đó thuật toán gộp cơ sở cũng thực hiện khá tốt và có thể giảm số lượng kết nối tại mỗi nút phần tử đặc biệt trong khi truy vấn Vì vậy người ta lai ghép giữa thuật toán gộp cơ sở với thuật toán gộp chia sẻ để cho ra đời thuật toán gộp lai ghép Thuật toán này được trình bày ở phần 5.1b

Trang 36

2.1.5 Thuật toán gộp cải tiến

Thuật toán gộp cải tiến ánh xạ XML DTD sang lược đồ quan hệ [19] Đây là một thuật toán xuất phát từ thuật toán gộp chia sẻ nhưng hình thức của

nó được cải tiến rất nhiều Chẳng hạn, thuật toán gộp cải tiến có thể laọi bỏ sự

dư thừa dữ liệu gây ra bởi những phần tử chung, có thể khắc phục những lỗi chưa được gộp chia sẻ giải quyết; thực hiện tối ưu và nâng cao hiệu quả của thuật toán

Như định nghĩa ở chương I, XML DTD mô tả cấu trúc của tài liệu XML vvà được xem như lược đồ cho tài liệu XML Ở đây, thuật toán gộp cải tiến cũng sử dụng DTD làm lược đồ XML trong quá trình chuyển đổi và xem các thuộc tính XML như là các phần tử XML không có cấu trúc lồng

Xét một DTD D là một tập định nghĩa các phần tử XML {d1,d2,…,dk} Mỗi phần tử di có dạng ni = ei, trong đó ni là tên của một phần tử XML, ei là một biểu thức DTD Một biểu thức DTD gồm tên các phần tử XML (biểu thức DTD gốc) và các biểu thức con có sử dụng các toán tử:

- Toán tử bộ: (e1,e2,…,en) biểu diễn một bộ của các biểu thức con DTD Toán tử bộ xác định bởi ký hiệu “,” Đặc biệt chúng ta xem (e) là một bộ đơn duy nhất

- Toán tử sao: e* là sự xuất hiện của không hoặc nhiều biểu thức con e

- Toán tử cộng: e+ biểu diễn sự xuất hiện của một hoặc nhiều biểu thức con e

- Toán tử tuỳ chọn:e? biểu diễn sự xuất hiện có chọn lựa 0 hoặc 1 biểu

Trang 37

Định nghĩa 2.1: Một biểu thức DTD e được định nghĩa một cách đệ qui, trong đó n là hạng (range) theo tên các phần tử DTD và e1,e2,…,en là hạng của các biểu thức DTD

e::=string|n|e+|e*|e?|(e1,e2,…,en )|(e1|e2|…|en) Thuật toán gộp cải tiến ánh xạ dữ liệu DTD sang lược đồ quan hệ gồm

3 bước: Đơn giản hoá DTD, tạo và giản lược đồ thị DTD, sinh lược đồ quan

hệ

2.1.5.1 Đơn giản hoá DTD

Các qui tắc đơn giàn hoá DTD được cho trong bảng đưới đây:

Bảng 2.6: Qui tắc đơn giản hoá DTD

1) Áp dụng qui tắc 1 một cách đệ qui và DTD kết quả sẽ không còn chứa +

2) Áp dụng qui tắc 2 một cách đệ qui và DTD kết quả sẽ không con chứa + và ?

3) Áp dụng qui tắc 3 một cách đệ qui và DTD kết quả sẽ không còn chứa +, ? và |

4) Áp dụng qui tắc 4(a) và 4(b) một cách đệ qui và DTD kết quả sẽ có dạng (e1,e2,…,en) Mỗi ei=e hoặc e* (i=1,2,…,n), trong đó e là tên

Trang 38

của một phần tử Vì vậy một số DTD sẽ có dạng phẳng sau bước này

5) Áp dụng qui tắc 5(a), 5(b), 5(c) và 5(d) một cách đệ qui và DTD kết quả sẽ có dạng (e1,e2,…,en) Sao cho mỗi ei chứa tên phần tử phân biệt

Ví dụ 2.5: Đơn giản hoá DTD sau đây

<!ELEMENT a ((b+, c*, d?)?, (e?, f, (g*, h?)+)?)>

Kết quả chuyển đổi áp dụng các qui tắc trên cho ví dụ 2.5 như sau:

<!ELEMENT a (b*, c*, d, e, f, g*, h*)>

Định lý 2.1: Thủ tục đơn giản hoá DTD là hoàn chỉnh, nghĩa là nó chấp

nhận mội DTD đầu vào và mỗi biểu thức DTD kết quả có dạng: (e1,e2,…,en), trong đó ei=e hoặc e* (i=1,2,…,n), e là tên của một phần tử, mỗi ei chứa một tên phần tử XML phân biệt

(Định lý 2.1 được phát biểu trong tài liệu [19])

2.1.5.2 Tạo lập và giản lƣợc đồ thị DTD

Đồ thị DTD được tạo lập dựa trên DTD đã được đơn giản hoá Để tránh

dư thừa dữ liệu khi sinh lược đồ quan hệ ta chỉ gộp một phần tử con c vào một phần tử cha p khi c xuất hiện nhiều nhất một lần trong p Theo định lý 2.1, mỗi biểu thức DTD là một bộ phân biệt gồm tên phần tử hoặc toán tử “*” Vì vậy, trên đồ thị DTD mỗi nút biểu diễn một phần tử XML, mỗi cạnh biểu diễn một toán tử bộ “,” hoặc toán tử “ * ” Thủ tục gộp gồm 3 trường hợp sau:

Trường hợp 1: Chỉ có một cạnh duy nhất được nối từ a đến b, ngoài ra

không còn phần tử nào khác nối đến b, nghĩa là bkhông phải nút chung Trong trường hợp này, nếu a chứa duy nhất một sự xuất hiện của b thì ta sẽ gộp nút b vào a mà vẫn đảm bảo được mối quan hệ cha con giữa b và các con của b

Trang 39

Trường hợp 2: Ngoài cạnh nối từ a đến bcòn có những cạnh khác nối

đến b, hay nói cách khác b là nút chung Khi đó, ta sẽ không gộp nút b vào a vì

b có nhiều cha

Trường hợp 3: Phần tử a nối b theo nhiều cạnh (cạnh “ * ”) Nghĩa là

mỗi phần tử a có thể có nhiều sự xuất hiện của phần tử b Trong trường hợp này ta sẽ không gộp b vào a

Chúng ta định nghĩa một nút có thể gộp như sau:

Định nghĩa 2.2: Cho một đồ thị DTD, một đỉnh có thể gộp nếu và chỉ

nếu nó có đúng một cạnh đi vào-tương ứng với toán tử bộ

Định nghĩa 2.3: Cho trước một đồ thị DTD và một đỉnh e trong đồ thị

Đỉnh e và tất cả các đỉnh có thể gộp khác có thể đến được từ e bằng đúng một cạnh tạo thành cây thì cây đó là cây có thể gộp đỉnh e (nút gốc tại e)

Ví dụ 2.6: Trong hình 2.3 A, đỉnh b và d là đỉnh có thể gộp, a và c là

đỉnh không thể gộp bởi vì a và c có nhiều cạnh đi vào (cạnh “*”) Cây có thể gộp đỉnh a chứa đỉnh a và b, cây có thể gộp đỉnh c chứa đỉnh c và d Hình 2.3.C, đỉnh b, c, d và f là đỉnh có thể gộp, nhưng đỉnh a, e và g là đỉnh không thể gộp Cây có thể gộp đỉnh a chứa các đỉnh a, b, c, d, cây có thể gộp đỉnh e chứa đỉnh e và f

Trang 40

Hình 2.3: Thao tác gộp

Thuật toán gộp cải tiến được minh hoạ trong đợn mã sau đây chủ yếu là

sử dụng chiến lược tìm kiếm theo chiều sâu để xác định cây có thể gộp cho từng nút và cuối cùng gộp cây đó vào nút gốc của nó Trường inlinedSet kiểu tập hợp được đưa ra cho mỗi đỉnh e để biểu diễn tập hợp các nút phần tử XML được gộp vào nút e (khởi tạo là e.inlinedSet={e}) Như trong hình 2.3.C, sau khi thực hiện thủ tục inlining thì a.inlinedSet={a, b, c, d}

Thuật toán Inline(DTDGraph G)

Ngày đăng: 25/03/2015, 09:36

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w