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 1CHUYỂN ĐÔI DỮ LIỆU GIỮA XML
VÀ CƠ SỞ DỮ LIỆU QUAN HỆ
Trang 2DANH 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 3DANH 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 4MỘ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 5Mở đầ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 6sẵ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 9Nhì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 111.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 121.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:
&để chỉ &, <để chỉ <, >để 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 14mộ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 16Bạ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 171.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 19tà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 20Quan 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,t2r 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 21Xé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 22miề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 23r 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 24Trong 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 25Chươ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 26nhau Đâ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 30thà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 31Hì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 32mớ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 331)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 34author (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 35book (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 362.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 38củ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 39Trườ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 40Hì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)