Có nhiều hướng tiếp cận khác nhau trong việc chuyển đổi từ mô hình quan hệ sang mô hình XML như: XML Extender của IBM, XML-DBMS, SilkRoute, XPERANTO[9][10]. Tất cả các công cụ này yêu cầu phải đưa ra đựơc ánh xạ của lược đồ (do các chuyên gia thực hiện) trước khi chuyển lược đồ quan hệ đã cho sang lược đồ XML. Theo hướng tiếp cận này, ta thấy việc thiết kế lược đồ đích cần đầu tư quá lớn về công sức của con người. Với mong muốn khắc phục nhược điểm đó, luận văn sẽ giới thiệu các thuật toán chuyển đổi phẳng (FT), NeT và CoT [11][12][16]. Bởi vì đây là các thuật toán có thể tự đọng đưa ra lược đồ XML mô tả rất tốt về cấu trúc và ngữ nghĩa của lược đồ gốc.
-Thuật toán FT chuyển mô hình quan hệ phẳng sang mô hình XML phẳng băng ánh xạ 1-1.
-Thuật toán NeT tạo ra một cấu trúc lồng từ mô hình quan hệ phẳng bằng cách thực hiện lặp đi lặp lại toán tử lồng “nest” trên mỗi bảng cho đến khi lược đồ kết quả trở nên phân cấp.
-Thuật toán CoT xem xét cấu trúc của lược đồ quan hệ và ràng buộc ngữ nghĩa như các phụ thuộc hàm. Dữ liệu đầu vào là một lược đồ quan hệ trong đó nhiều bảng liên kết với nhau thông qua quan hệ bao hàm và nó chuyển sang lược đồ Xschema.
Giả sử tồn tại một tập T gồm các tên bảng, một tập C các tên cột (trường), và tập blà kiểu dữ liệu cơ bản trong SQL chuẩn (như integer, char,
string…). Khi có sự xung đột về tên xảy ra thì tên cột cCsẽ được xác định bởi tên bảng tT , ví dụ t[c].
Định nghĩa 2.6: Lược đồ quan hệ
Một lược đồ quan hệ được biểu diễn bởi một bộ 4 R=(T, C, P, ), trong đó:
T: là một tập hữu hạn các tên bảng trong T.
C: là một hàm từ tên bảng tT đễn tập các tên cột cC .
P: là một hàm từ tên trường c đến định nghĩa kiểu của nó. Ví dụ, P(c)=, trong đó là một bộ 5 (, u, n,d, f) với b, u là duy nhất hoặc không duy nhất, n là rỗng hoặc không rỗng, d là một tập hữu hạn miền giá trị của c hoặc (không xác định), f là giá trị mặc định của c hoặc (không xác định).
là một tập hữu hạn các ràng buộc toàn vẹn. có thể được truy vấn từ CSDL quan hệ thông qua kết nối ODBC/JDBC như ràng buộc khoá, ràng buộc tham chiếu.
Ví dụ 2.12: Xét 2 quan hệ SinhVien(tenSV, gioiTinh, nguoiHD, khoaHoc) và GiaoVien(tenGV, tuoi). Các trường gạch dưới là khoá chính,
nguoiHD là khoá phụ tham chiếu đến cột tenGV . Trường tuoi có kiểu số nguyên, các cột còn lại kiểu chuỗi. Trường tuoi có thể nhận giá trị Null. Khi người hướng dẫn sinh viên chưa được xác định thì “Le Quyet Thang” là giá trị mặc định. Một sinh viên có thể có nhiều giáo viên hướng dẫn và có thể không tham gia hoặc tham gia nhiều khoá học. Vậy lược đồ quan hệ R1=R=(T, C, P,
) như sau:
T={SinhVien, GiaoVien}
C(GiaoVien) = {tenGV, giới tính, tuoi}
P(tenSV) = {string, unique, not_nullable, ε, ε}
P(GioiTinh) = {string, not_ unique, nullable, {M,F}, ε}
P(nguoiHD) = {string,not_ unique, not_ nullable, ε,"Le Quyet Thang" } P(khoaHoc) = {string, not_ unique, nullable, ε , ε}
P(tenGV) = {string, unique, not_nullable, ε , ε} P(tuoi) = {integer, not_ unique, nullable, ε , ε}
= {{tenSV, nguoiHD, khoaHoc } Sinh vien, key tenGV key GiaoVien, nguoiHD tenGV}
Thuật toán NeT và CoT dùng XSxhema như ngôn ngữ mô hình kết quả (Output model), đặc điểm của nó là ngắn gọn, súc tích, phù hợp với thực tế. XSchema gồm hai phần: Thuật toán chuyển đổi (NeT, CoT) và khái niệm lược đồ). Tổng quát của hướng tiếp cận này như sau:
Hình 2.11: Hướng tiếp cận tổng quát của 2 thuật toán NeT và CoT, ta có thể áp dụng độc lập hoặc kết hợp.
(1) R NeT X, (2) R CoT X, (3) R NeT CoT, X
Constraint RDB NeT NeT XML Schemas Final XML Schema Schemas Designer
XSchema là một cây cú pháp gồm những đặc tả về thuộc tính, kiểu dữ
liệu và các đặc tả ràng buộc. Để xác định XSchema ta giả sử Elà một tập hợp tên các phần tử, A là tập hợp tên các thuộc tính và là một tập hợp các kiểu dữ liệu được định nghĩa trong W3C (như ID, IDREF, string, integer, date,….) Tên thuộc tính a A được mô tả bởi biểu thức đường dẫn: e1, e2, ….en.a với eiE, 1 i n.
Định nghĩa 2.7: (lược đồ XSchema)
Một XSchema được xác định bởi một bộ 6, X = (E, A, M, P, r, ), trong đó:
E là một tập hữu hạn tên các phân tử trong E
A là hàm từ tên một phần tử e E đến tập hợp tên các thuộc tính a
A
M là một hàm tử tên một phần tử e E đến định nghĩa kiểu phần tử của nó như: M(e) = , với là một biểu thức:
*
:: , ?
Trong đó, ε xác định phần tử rỗng, ," "là hợp, "," là ghép nối,
" ?" biểu diễn sự không xuất hiện hoặc xuất hiện một lần," * " biểu diễn sự xuất hiện nhiều lần, "" biểu diễn " , * ",
P là một hàm từ tên thuộc tính đến định nghĩa kiểu thuộc tính đó. Ví dụ P(a) = với là một bộ 4 (, a, d, f), trong đó , n là "?" (rỗng ) hoặc
? (không rỗng), d là một hữu hạn miền giá trị của a hoặc ε nếu không xác định.
r E là một tập hữu hạn các phần tử gốc.
Phần này chúng ta chỉ tập trung vào thuật toán chuyển đổi NeT và CoT, nên bỏ qua việc chuyển đổi từ XSchema sang ngôn ngữ lược đồ XML cuối cùng. Tuy nhiên, tuỳ thuộc vào ngôn ngữ lược đồ XML được chon, một số hình thức đặc biệt của XSchema sẽ không được chuyển vào kết quả cuối cùng. Ví dụ đối với dữ liệu kém quan trọng hay những thông tin về khoá sẽ mất đi nếu dùng DTD như ngôn ngữ lược đồ XML cuối cùng.
Mô hình XML sử dụng 2 thành phần cơ bản để xây dựng tài liệu XML là phần tử và thuộc tính. Một số đặc tính cơ bản kế thừa từ mô hình XML như sau:
- Các thuộc tính của một nút không có thứ tự nhưng các phần tử con của nút là có thứ tự.
- Phần tử và thuộc tính đều được hỗ trợ kiểu dữ liệu đặc tả trong W3C.
- Các phần tử biểu diễn sự kiện tốt hơn các thuộc tính.
Để tăng tính mềm dẻo trong các thuật toán, ta có thể dùng một trong hai cách: Hướng thuộc tính hoặc hướng phần tử. Tuỳ thuộc vào từng cách mà thuật toán có thể lựa chọn việc chuyển đổi thực tế trong RDB sang thuộc tính hay phần tử nếu như cả hai có thể mô tả chính xác thực thể. Tuy nhiên, nếu việc lựa chọn ngôn ngữ lược đồ XML yêu cầu thuộc tính hoặc phần tử cho thực thể thì thuật toán phải có những điều kiện kèm theo (ví dụ: Một cột khoá trong RDB cần phải chuyển sang một thuộc tính có kiểu ID trong XML).