Thuật toán gộp cơ sở

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Xử lý truy vấn trên cơ sở dữ liệu tích hợp XML Luận văn ThS. Công nghệ thông tin 1.01.10 (Trang 68)

Ví dụ 3.10: cho tài liệu XML: <book>

<booktitle> Giao trinh C++ </booktitle> <author id=”PVA”>

<name>

<firstname> At </firstname>

<lastname> Pham Van </lastname> </name>

<address>

<city> Ha Noi </city> <zip> 8404 </zip>

</address> </author> </book> Và tệp DTD tương ứng: <!ELEMENT book(booktitle,author)> <!ELEMENT article(title,author*,contactauthor)>

<!ELEMENT contactauthor authorID IDREF IMPLIED> <!ELEMENT monograp(title,author,editor)>

<!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>

Khi tiến hành chuyển đổi một DTD sang quan hệ thường thực hiện ánh xạ từng phần tử trong DTD thành một quan hệ và ánh xạ các thuộc tính của phần tử thành các thuộc tính của quan hệ. Tuy nhiên không có sự tương ứng giữa các phần tử và các thuộc tính trong DTD với các thực thể và thuộc tính của mô hình ER. Việc ánh xạ trực tiếp các phần tử thành các quan hệ như vậy dẫn đến đoạn dư thừa trong tài liệu.

Công nghệ Basic Inlining, gọi tắt là Basic, giải quyết vấn đề trên bằng cách gộp nhiều hậu duệ của một phần tử cà một quan hệ đơn. Basic tạo các quan hệ cho mọi phần tử bởi vì một tài liệu XML có thể đặt gốc ở một phần

69 tử bất kỳ trong DTD. Ví dụ: phần tử author được ánh xạ thành quan hệ với các thuộc tính firstname, lastname và address.

Có hai trường hợp được xét: cac thuộc tính được thiết lập giá trị sẵn và sử dụng đệ quy. Trong ví dụ trên, khi tạo quan hệ cho article, không thể tiến hành gộpcác authors bởi vì mô hình quan hệ truyền thống không hỗ trợ các thuộc tính đã được thiết lập giá trị. Khi đó để lưu trữ các giá trị trong một RDBMS và tạo quan hệ cho author và liên kết authorsarticle thông qua khóa ngoại.

Một đồ thị DTD mô tả cấu trúc của một DTD. Các nút là các phần tử, các thuộc tính và các toán tử xây dựng trong DTD. Mỗi phần tử chỉ xuất hiện đúng một lần trong đồ thị, các thuộc tính và các toán tử có thể xuất hiện nhiều lần như trong DTD. Ta có đố thị DTD tương ứng với ví dụ trên như sau:

Nhìn vào đồ thị nhận thấy chu trình thực hiện dựa trên cơ chế đệ quy. Lược đồ tạo ra cho một DTD là tập hợp của các quan hệ cho từng phần tử. Để xem xét tập các quan hệ được tạo ra cho các phần tử riêng biệt, ta tạo ra một cấu trúc đồ thị gọi là đồ thị phần tử. Đồ thị phần tử được xây dựng theo các bước:

(1) Thực hiện duyệt đồ thị DTD theo chiều sâu, bắt đầu từ nút phần tử xây dựng quan hệ. Mỗi nút được đánh dấu “visited” ở lần đầu tiên nó được xét và được bỏ đánh dấu khi tất cả các con của nó được duyệt.

(2) Trong quá trình duyệt theo chiều sâu, nếu một nút không được đánh dấu trong đồ thị DTD, sinh ra một nút mới với một tên giống như thế trong đồ thị phần tử. Một cạnh được tạo ra nối phần tử gần nhất đã được tạo ra trước trong đồ thị với một nút phần tử mới. Nếu duyệt một nút DTD được đánh dấu rồi thì cạnh ngược lại được tạo ra để nối đỉnh mới được tạo với đỉnh được tạo gần nhất.

71

Hình III. 7: Đồ thị phần tư cho phần tử Editor

Cho trước một lược đồ phần tử, các quan hệ được tạo ra như sau: Một quan hệ được tạo ra cho một phần tử gốc của đồ thị. Tất cả các cháu được gộp vào trong quan hệ, ngoại trừ hai trường hợp:

- Các con trực tiếp dưới nút “*” được tạo ra các quan hệ riêng biệt – điều này tương ứng với việc tạo một quan hệ mới cho phần tử con đuợc thiết lập giá trị.

- Mỗi nút có cạnh ngược được tạo ra quan hệ riêng – điều này tương ứng với việc tạo ra quan hệ mới để lưu sự đệ quy.

Thuật toán này tốt cho kiểu truy vấn chắc chắn nhưng nó không hiệu quả đối với các loại truy vấn khác có sự liên kết giữa các bảng. Và điểm hạn chế nữa là tạo ra một số lượng lớn các quan hệ.

III.2.2. Thuật toán gộp chia sẻ:

Kỹ thuật gộp được chia sẻ khắc phục các hạn chế của Basic bằng cách chắc chắn rằng một nút phần tử được thể hiện trong chính xác một quan hệ. Ý tưởng chính của thuật toán là xác định các nút phần tử được thể hiện ở nhiều quan hệ trong Basic và chia sẻ (dùng chung) chúng bằng cách tạo quan hệ riêng biệt cho các phần tử này.

Việt quyết định nút phần tử nào được đưa ra trong quan hệ riêng liên quan đến việc xây dựng lược đồ quan hệ dễ dàng. Mỗi nút phần tử X được phân chia một quan hệ riêng, gộp tất cả các nút Y mà có cung trực tiếp từ X đến Y. Phần tử chia sẻ có liên quan đến việc xử lý các câu truy vấn.

III.2.3. Thuật toán Inlining chuyển đổi DTD sang lược đồ quan hệ

Thuật toán Inlining ánh xạ các DTD XML sang các lược đồ quan hệ. Thuật toán này được phát triển tử thuật toán “Gộp chia sẻ”

XML DTD mô tả cấu trúc của một tài liệu XML và được xem như lược đồ của các tài liệu XML. Các phần tử XML và các thuộc tính XML đều được mô hình như các phần tử vì các thuộc tính XML được xem như các phần tử XML không hỗ trợ cấu trúc lồng. Một DTD được mô hình như một tập các định nghĩa phần tử XML {d1, d2, …,dk}. Mỗi định nghĩa phần tử XML di có dạng ni=ei với ni là tên của phần tử X và ei là biểu thức DTD. Mỗi biểu thức DTD được tạo từ tên các phần tử XML( biểu thức DTD nguyên thủy) và các biểu thức con DTD sử dụng một trong các toán tử:

- Toán tử bộ: (e1,e2,…,en) biểu diễn một bộ của biểu thức con DTD. Trường hợp tiêng xem (e) là một bộ đơn nhất, toán tử biểu diễn: “,”

- Toán tử dấu sao: e* thể hiện sự xảy ra (có mặt) không hoặc nhiều lần của biểu thức e

- Toán tử cộng: e+ thể hiện sự có mặt một hoặc nhiều lần của biểu thức e - Toán tử tùy chọn: e? thể hiện sự tùy chọn 0 hoặc 1 của một biểu thức con e

- Toán tử hoặc: (e1|e2) thể hiện sự xảy ra của một trong hai biểu thức e1 và e2

Định nghĩa 3.4: Một biểu thức DTD e được định nghĩa đệ quy trong ký hiệu BNF với n là số phần tử XML và e1, e2, …,en là hạn trên các biểu thức DTD.

e::=string|n|e+|e*|e?|(e1,e2,e3)|(e1|e2|…|en)

Ký hiệu “::=” là “được định nghĩa” và “|” là “hoặc là”. Thuật toán gồm các bước sau:

a. Đơn giản hóa các DTD. Trong trường hợp có các biểu thức DTD phức tạp do khả năng lồng nhau của cấu trúc phân cấp.

73 b. Tạo lập và giản lựoc các đồ thị DTD: Tạo ra đồ thị DTD tương ứng dựa trên DTD đã được giản lược hóa và gộp nhóm nhiều phần tử có thể thành một phần tử XML. Khác với thuật toán “Gộp chia sẻ” các quy tắc giản lược của thuật toán này loại trừ sự dư thừa được tạo ra bởi các phần tử chung trong lúc sinh ra lược đồ quan hệ và có thể liên quan đến DTD đầu vào bất kỳ và có thể bao gồm các chu trình tùy ý

c. Sinh ra lược đồ quan hệ: Sau khi một đồ thị DTD được giản lược, chúng sinh ra một lược đồ quan hệ dựa trên đó.

Các bước chi tiết:

Bước 1: Đơn giản hóa DTD

Các quy tắc để đơn giản hóa lược đồ DTD:

(1) e+ -> e*. áp dụng quy tắc nhiều lần một đệ quy thì kết quả không chưa +

(2) e? -> e.  áp dụng quy tắc nhiều lần thì kết quả không chứa ?

(3) (e1|e2|…|en)->(e1,e2,…,en)  áp dụng quy tắc nhiều lần không còn chứa dấu | (4) (e1,e2,…,en)->(e1 * , e2 *,…,en *

) và e** -> e*  áp dụng quy tắc nhiều lần sẽ có kết quả dạng (e1, e2,…,en) với ei=e với e là một tên phần tử => DTD trở nên phẳng hơn sau khi sử dụng thuật toán này.

(5)

…e,…,e,….-> ….,e8,…. …e,…,e*,…->….,e*,…. …e*,….,e….->….,e*,…. …e*,….,e*,…->….,e*,…

=> Áp dụng quy tắc một cách đệ quy kết quả có dạng (e1,e2,…,en) với ei là tên của một phần tử đặc biệt.

Chú ý: Khi xét các quan hệ giữa các phần tử anh em, phần tử cha, cần chú ý:

- Mối quan hệ cha con giữa các phần tử XML - Mỗi quan hệ thứ tự giữa các anh em

Định lý: Thủ tục giản lược hóa là đầy đủ với ý nghĩa rằng nó nhận mọi DTD đầu vào và mỗi biểu thức DTD có dạng (e1,e2,…,en). Trong đó:

ei=e với e là tên một phần tử và mỗi ei cho một tên phần tử XML duy nhất

Bước 2: Tạo và giản lược đồ thị DTD. Trong bước này tạo ra đồ thị DTD tương ứng dựa trên DTD đã được giản lược và gộp các phần tử con cháu có thể vào một phần tử. Chỉ gộp một con c vào cha p khi p có thể chứ nhiều nhất một sự xảy ra của c để tránh việc dư thừa dữ liệu trong quan hệ được sinh ra. Mỗi nút trong đồ thị DTD tương ứng thể hiện một phần tử XML và mỗi cạnh thể hiện một toán tử hoặc là “,” hoặc toán tử “*”. Thủ tục Inlining xét ba khả năng như sau:

Trường hợp 1: Phần tử a được nối với phần tử b bởi một cạnh đến từ a và b không có cạnh vào nào khác. Nói cách khác b không phải là nút chung. Trong trường hợp này có thể chứa nhiều nhất một sự xuất hiện của b và chúnh sẽ kết nối nút b sang a trong khi vẫn bảo đảm mối quan hệ cha con giữa ba và các con của nó.

Trường hợp 2: Phần tử a được nối với phần tử b bởi một cạnh đến tử a nhưng b có cạnh vào từ các phần tử khác. Hay b là nút chung, không thể kết hợp b vào a trong trường hợp này vì b có nhiều cha mẹ.

Trường hợp 3: Phần tử a kết nối sang b bởi nhiều cạnh đến tử a và khi đó mỗi a có thể chứa nhiều sự xảy ra của phần tử b và chúng không gộp b vào a.

75

Định nghĩa 3.5: Cho trước một đồ thị DTD, một đỉnh là gộp được nếu và chỉ nếu nó chỉ có đúng một cạnh đến.

Định nghĩa 3.6: 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 được khác có thể đến được từ e bằng đúng một cạnh tạo thành cây. Cây này được gọi là cây có thể gộp đỉnh e(gốc ở e).

Hình III.8: Thao tác Inlining

Tư tưởng của thuật toán Inlining dựa trên thuật tóan gộp chia sẻ nhưng có một số cải tiến:

(a) Tính đầy đủ: thuật toán là đầy đủ với ý nghĩa có thể làm việc với bất kỳ DTD đầu vào kể cả bao gồm các chu trình DTD tùy ý.

(b) Loại bỏ các dữ liệu dư thừa trong các nút chung: Chiến lược loại bỏ dữ liệu dư thừa và một nội dung giống như vậy như các quy tắc cho việc ánh xạ mối quan hệ nhiều nhiều vào các quan hệ riêng trong việc chuyển ER vào các lược đồ quan hệ.

(c) Tối ưu: Xét được với một số trường hợp phổ biến của tài liệu xml - Phần tử XML không có thuộc tính và giản lược sẽ cấp một tên thẻ.

- Có nhiều nút đầu cuối được chia sẻ bởi nhiều phần tử XML. Nếu tạo quan hệ riêng cho mỗi phần tử thì sẽ tạp ra tâp các quan hệ có dạng khác

nhau. Vì thế thay vì tạo ra nhiều quan hệ khác nhau thì cho phép tạo ra một quan hệ duy nhất kết hợp hai quan hệ trên lại. Điều này làm giảm đáng kể số lượng quan hệ được sinh ra trong lược đồ.

III.3. Kết luận:

Chương này giới thiệu cách chuyển đổi từ mô hình dữ liệu quan hệ sang dữ liệu XML trong đó đảm bảo xử lý hầu hết các ràng buộc dữ liệu như phụ thuộc hàm, phụ thuộc đa trị, phụ thuộc kết nối,…Ngoài ra còn trình bày một số thuật toán để thực hiện các chuyển đổi tương ứng giữa hai mô hình dữ liệu.

77

CHƯƠNG IV: XỬ LÝ TRUY VẤN

XML là một ngôn ngữ đánh dấu linh hoạt, có khả năng mã hóa thông tin lưu trữ dưới nhiều dạng khác nhau: dữ liệu có cấu trúc và không có cấu trúc, cơ sở dữ liệu quan hệ hay mô tả dưới dạng đối tượng. Ngôn ngữ truy vấn trên dữ liệu XML cho phép thực hiện một truy vấn rõ ràng mà không phân biệt kiểu của dữ liệu, vì vậy XML được coi như mức lưu trữ trung gian cho các kiểu dữ liệu trao đổi.

Để thực hiện lưu trữ và truy vấn dữ liệu XML có các cách tiếp cận chính:

* Cách thứ nhất là phát triển kho XML địa phương hỗ trợ các mô hình dữ liệu XML và ngôn ngữ truy vấn trực tiếp.

* Cách tiếp cận thứ 2 là sử dụng các lợi thế của các kỹ thuật đã được cung cấp bởi các hệ quản trị CSDL quan hệ hay đối tượng. Vấn đề chính của cách tiếp cận thứ 2 là:

+ Mô hình dữ liệu XML cần được ánh xạ sang mô hình đích thực như mô hình quan hệ.

+ Các truy vấn đề ra trong ngôn ngữ truy vấn cần được chuyển sang ngôn ngữ truy vấn đích đã có như SQL hay OQL.

+ Các kết quả truy vấn từ các CSDL cần được xuất trở lại định dạng XML.

* Cách tiếp cận thứ 3 là sử dụng hệ thống cơ sở dữ liệu thương mại có khả năng XML. Hiện nay, hầu hết các CSDL chính như SQL Server, Oracle và BD2 đều cung cấp cơ chế để lưu trữ và truy vấn dữ liệu XML bằng mở rộng mô hình dữ liệu đã tồn tại với một kiểu dữ liệu XML truyền thống.

Hình IV. 1: Kiến trúc hệ thống xử lý truy vấn

79

IV.1. Xử lý truy vấn XML theo hướng truyền thống:

Xử lý truy vấn trên dữ liệu XML theo hướng truyền thống là cách thức thực hiện các câu truy vấn trên cơ sở dữ liệu quan hệ mà tài liệu XML đã được chuyển đổi về.

Để thực hiện xử lý truy vấn dựa trên cơ sở dữ liệu quan hệ thì xử lý truy vấn XML cần phải có các “mô hình dữ liệu” tương ứng để mô tả dữ liệu. Mô hình dữ liệu để sử dụng cho XML là mô hình Inforset. Trong mô hình này, dữ liệu XML được biến đổi thành một sơ đồ cây với thành phần gốc và các nhãn con tương ứng. Trong sơ đồ cây có nhiều loại nút được mô tả, như: nút tài liệu, nút thành phần, nút thuộc tính và nút dạng văn bản. Trong đó:

- Nút tài liệu được mô tả như thành phần gốc của cây và nó sẽ kết nối với nút thành phần gốc.

- Nút thành phần tương ứng như mô tả thành phần của tài liệu với một tên được xác định. Nút này có thể chứa danh sách các thành phần con hoặc các nút văn bản hay cũng có thể là giá trị của các thuộc tính.

- Nút thuộc tính là sự mô tả thuộc tính với tên và giá trị thuộc tính mô tả. - Nút văn bản đơn giản chỉ lưu trữ một xâu văn bản được mô tả trong các thẻ XML.

Ví dụ:

Cho tệp tài liệu XML <?xml version="1.0" ?> <report>

<section id=“intro” difficulty=“easy”> <title>Pub-Sub</title>

<figure source=“g1.jpg”> <title>XML Processing</title> </figure> </section> <figure source=“g2.jpg”> <title>Scalability</title> </figure> </section> </report>

Mô hình sơ đồ tương ứng mô tả tài liệu XML:

Hình IV. 3: Sơ đồ cây của tài liệu XML

81 - Trước tiên trình biên dịch của XDMS tiến hành phân tích câu truy vấn và tạo ra kế hoạch thực thi để làm thế nào tìm kiếm và xử lý dữ liệu XML đã có để cuối cùng trả lại kết quả của câu lệnh truy vấn.

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Xử lý truy vấn trên cơ sở dữ liệu tích hợp XML Luận văn ThS. Công nghệ thông tin 1.01.10 (Trang 68)

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

(99 trang)