Các hệ thống tệp phẳng có từ giữa những năm 50 theo một thiết kế đơn giản, các tệp chứa các đoạn văn bản một cách liên tục, cấu trúc dữ liệu không quan trọng. Các hệ thống như thế này thì tính dư thừa dữ liệu không thể kiểm soát được, dữ liệu không nhất quán, hiệu suất thấp và giá thành bảo trì cao, tuy nhiên các nhà nghiên cứu đã bắt đầu nghiên cứu để tìm ra các cách để khai thác cấu trúc của dữ liệu lưu trữ.
Các CSDL phân cấp là cải tiến đầu tiên trên các tệp phẳng. Bản thiết kế
của chúng phụ thuộc vào cấu trúc dữ liệu, chúng không mềm dẻo: bất kỳ sự thay
đổi nào trên dữ liệu cũng đòi hỏi thay đổi đối với các ứng dụng sử dụng dữ liệu
đó. Để khắc phục những thiếu sót của hệ thống phân cấp, các nhà phát triển tạo ra CSDL mạng bằng việc đưa ra các liên kết giữa các cấu trúc. Tuy nhiên để sử
dụng một CSDL mạng hiệu quả, chúng ta phải biết được cấu trúc của CSDL đó như thế nào và làm thế nào để duyệt được cấu trúc đó.
Trong đầu những năm 70, một nhà nghiên cứu của IBM Research tên là Edgar F.Codd đã đề xuất sự thay đổi dựa trên dữ liệu quan hệ. Việc thể hiện trong các CSDL quan hệ là mềm dẻo, đơn giản và không phục thuộc vào ứng dụng. Mô hình quan hệ có thể thể hiện một số lượng lớn dữ liệu; tuy nhiên nó không phù hợp với dữ liệu nửa cấu trúc và dữ liệu có sự lồng nhau phức tạp.
Sự xuất hiện của XML như cách để trao đổi và thể hiện dữ liệu là gợi ý cho việc nó đứng ở giữa các đề xuất mô hình dữ liệu quan hệ. Cấu trúc dữ liệu XML có thể phức tạp, để xử lý dữ liệu XML hiệu quả thì người dùng phải biết
được cấu trúc của nó.
2.3.2. Các hệ thống CSDL XML
Các hệ thống lưu dữ liệu XML có thể phân thành 2 loại chính như sau: Hệ
CSDL khả XML( XML-enabled databases - XED) và hệ CSDL XML nguyên bản (native XML databases - NXD).
XED thường sử dụng để lưu dữ các tài liệu hướng dữ liệu [13]. Có 3 điểm khác nhau chính giữa XED và NXD:
- NXD bảo toàn được cấu trúc vật lý – các phần CDATA, chú thích và các chỉ thị lập trình, DTD. Về mặt lý thuyết thì các XED cũng có thể làm
được điều này nhưng trên thực tế lại chưa thực hiện được
- NXD có thể lưu trữ không giản đồ. Chúng ta cũng có thể sử dụng các kỹ
thuật để định danh cấu trúc trong các tài liệu được lưu trong XED. Tuy nhiên các kỹ thuật này bị giới hạn
- Việc truy cập tới dữ liệu được lưu trong NXD thường được thông qua XPath, DOM hoặc các giao diện lập trình có liên quan đến. XED thường truy cập dữ liệu qua một API chuẩn mở như ODBC hoặc JDBC.
Hầu hết các hệ thống có hỗ trợ XML được xây dựng dựa trên các hệ thống CSDL quan hệ hoặc hệ thống CSDL quan hệ đối tượng. Với các hệ thống như
thế người dùng có thể xuất bản dữ liệu trong XML và chuyển các truy vấn XML sang các câu lệnh SQL. ĐHTH quốc gia Singapo (National University of Singpore) thiết kế ra một hệ quản trị CSDL là Xena, cho phép XML sử dụng XPath, được thực thi bên trên hệ quản trị CSDL MySQL. Nó tựđộng lưu dữ liệu
XML trong các bảng theo giản đồ XML, sau đó Xena lấy dữ liệu từ các bảng bằng việc chuyển một truy vấn XPath thành một số truy vấn SQL.
Oracle9i là một hệ quản trị CSDL quan hệ/quan hệđối tượng thương mại rất nổi tiếng, Oracle9i cũng hỗ trợ xử lý XML. Công cụ tiện ích XML SQL Utility (XSU) được bao bởi Oracle9i, nó có thể chuyển dữ liệu lấy được từ các bảng quan hệ đối tượng hoặc từ các khung nhìn vào XML. XSU cung cấp các công cụ để ánh xạ nội dung XML vào các bảng quan hệ. Tuy nhiên với dữ liệu XML có cấu trúc phức tạp có thể phải cấu trúc lại trước khi ánh xạ.
SQL Server 2000 của hãng Microsoft cũng cho phép XML, SQLXML[22] được bao bởi SQL Server 2000 cho phép các nhà phát triển ánh xạ
các tệp XML vào các bảng quan hệ, tạo các khung nhìn XML của dữ liệu quan hệđã có, truy vấn dữ liệu quan hệ với XPath và sinh ra các kết quả XML cho các truy vấn SQL.
2.4. Cơ sở dữ liệu XML nguyên bản - NXD[20]
2.4.1. NXD là gì?
Như chúng ta đã biết, XML đang trở hành một chuẩn để trao đổi và thể hiện dữ liệu trên Internet. Lưu trữ tài liệu XML hiệu quả đã và đang trở thành vấn đề
cốt lõi trong việc quản lý dữ liệu. Hầu hết việc lưu trữ XML trước đây dựa trên các hệ thống quản trị dữ liệu truyền thống. Các hệ thống như vậy bao gồm cả
việc ánh xạ và chuyển đổi giữa XML sang cấu trúc dữ liệu cơ sở.
Sự chấp nhận một cách rộng rãi của tài liệu XML trong cả công nghiệp và khoa học đã và đang bộc lộ một sự việc gây nhiều tranh cãi. Một mặt nó dễ sử
dụng và mở rộng, mặt khác thì nó tạo ra sự khó khăn khi tích hợp vào các hệ
thống cũ (điển hình là các ứng dụng CSDL và các hệ quản trị CSDL). Kết quả
của mâu thuẫn này chính là sự xuất hiện của các cách lưu trữ dữ liệu XML nguyên bản. Vậy NXD là gì?
Theo định nghĩa của các thành viên phát triển đó là [20]:
- NXD định nghĩa một mô hình logic cho một tài liệu XML, lưu trữ, lấy các tài liệu theo mô hình đó. Tối thiểu thì mô hình đó phải bao gồm các phần tử, thuộc tính, PCData và thứ tự tài liệu. Một ví dụđiển hình của mô hình như thế này là mô hình dữ liệu Xpath, XML Infoset và các mô hình bao hàm cả DOM và thậm chí là trong SAX1.0.
- NXD xem một tài liệu XML như một đơn vị lưu trữ logic cơ sở. Tương tự
như với CSDL quan hệ, các bản ghi trong bảng là đơn vị lưu trữ cơ sở. - NXD không đòi hỏi phải có một mô hình lưu trữ vật lý đặc biệt nào ở
dưới. Ví dụ NXD có thể được xây dựng trên một CSDL quan hệ, CSDL phân cấp, CSDL hướng đối tượng hoăc sử dụng một định dạng lưu trữ
riêng như chỉ số hoặc tệp nén. Điều này có nghĩa là định dạng lưu trữ dữ
liệu nền tảng không quan trọng.
Một chuyên gia XML là Ronald Bourret đã liệt kê ra hầu hết các sản phẩm NXD trong đó có cả các sản phẩm mã nguồn mở và sản phẩm thương mại [23].
Ởđó ông cũng đã cung cấp cho chúng ta những mô tả sơ bộ về các đặc tính cũng như khả năng hỗ trợ của từng sản phẩm.
2.4.2. Các đặc tính của NXD
Trong phần này, sẽ trình bày ngắn gọn về các đặc tính chung của các NXD.
Điều này giúp chúng ta có một ý tưởng về các đặc tính nào đã có và các đặc tính nào được mong đợi ở các NXD đang và sẽđược phát triển trong tương lai.
- Sưu tập tài liệu - Ngôn ngữ truy vấn - Cập nhật và xóa
- Giao tác, khóa các giao tác tương tranh - Giao diện lập trình ứng dụng
"Sưu tập tài liệu
Rất nhiều CSDL XML hỗ trợ khái niệm sưu tập (collection). Sưu tập trong NXD đóng vai trò tương tự như một bảng trong CSDL quan hệ hoặc một thư
mục trong một hệ thống tệp. Ví dụ, chúng ta sử dụng một NXD để lưu các phiếu mua hàng, trong trường hợp này chúng ta có thể định nghĩa một sưu tập các phiếu mua hàng. Khi truy vấn trên các phiếu mua hàng có thể được giới hạn trong sưu tập này.
Giả sử chúng ta lưu các tài liệu hướng dẫn sử dụng các sản phẩm của một công ty trong một NXD. Trong trường hợp này chúng ta muốn định nghĩa một hệ
thống phân cấp các sưu tập. Chúng ta có thể có một sưu tập cho từng sản phẩm và trong sưu tập đó chứa các chương trong mỗi tài liệu hướng dẫn.
"Các ngôn ngữ truy vấn
Xử lý truy vấn được xây dựng dựa trên cả định dạng lưu trữ và các chỉ số.
Đây là một chủđề lớn được nhiều nhà nghiên cứu cùng thảo luận. Hiệu năng và việc thực thi của xử lý truy vấn không chỉ bị ảnh hưởng bởi định dạng lưu trữ và các chỉ số mà chúng còn bịảnh hưởng bởi ngôn ngữ truy vấn.
Hầu hết NXD hỗ trợ một hoặc nhiều ngôn ngữ truy vấn. Ngôn ngữ truy vấn XML phổ biến nhất là XPath (phần mở rộng XPath hỗ trợ truy vấn trên nhiều tài liệu) và XQuery. Khi quan tâm đến một NXD, chúng ta nên kiểm tra mức độ hỗ
trợ đối với những yêu cầu mình đưa ra, từ việc tìm kiếm theo dạng text đến việc gộp nhiều đoạn của nhiều tài liệu khác nhau.
Trong tương lai, hầu hết NXD sẽ có khả năng hỗ trợ XQuery của W3C.
"Cập nhật và xóa
Các NXD sử dụng các phương thức khác nhau cho việc cập nhật và xóa tài liệu, từ việc thay thế hoặc xóa các tài liệu đang có tới việc sửa thông qua một cây DOM, đặc biệt là làm thế nào để xóa các đoạn của một tài liệu. Hầu hết các phương thức này là riêng rẽ và tùy thuộc vào từng ngôn ngữ. Dưới đây là hai ngôn ngữ trong số các ngôn ngữ chuẩn để cập nhật các tài liệu XML thường
được được gắn trong NXD.
- XUpdate của XML:DB Initiative, đây là một ngôn ngữ dựa vào XML. XUpdate sử dụng XPath để chỉ ra một tập các nút sau đó chỉ ra vị trí của nút để chèn thêm một nút mới trước nút này hoặc xóa các nút này khỏi tài liệu.
- Mở rộng XQuery được nhóm phát triển XQuery cùng với Patrick Lehti đề
xuất, nó có cú pháp dựa vào cú pháp cơ bản của XQuery.
"Giao tác, khóa các giao tác tương tranh
Hầu như toàn bộ các NXD đều hỗ trợ giao tác. Tuy nhiên, vấn đề khóa thường được thực hiện ở mức khóa toàn bộ tài liệu nhiều hơn là khóa ở các nút
độc lập, do đó số người dùng đồng thời có thể tương đối thấp. Điều này phụ
thuộc vào ứng dụng và những nội dung tạo nên tài liệu. Ví dụ:
- Một tài liệu là một chương của một bản hướng dẫn sử dụng cho người dùng và các tác giả sửa các chương. Khóa ở mức tài liệu gần như không gây ra lỗi đồng thời bởi vì hai tác giả cùng cập nhật vào một chương tại cùng một thời điểm là không xảy ra.
- Một tài liệu lưu dữ liệu về các hướng dẫn bán hàng của một công ty và người bán nhập thông tin hướng dẫn mới. Trong trường hợp này khóa mức tài liệu dường như gây ra lỗi, bởi vì cơ hội của 2 người bán hàng cập nhật thông tin hướng dẫn tại cùng một thời điểm là khá cao.
- Một tài liệu chứa dữ liệu sử dụng trong một luồng công việc, giống như
một hợp đồng tài chính. Mỗi bước của luồng đọc dữ liệu từ tài liệu và thêm dữ liệu của bước đó vào. Ví dụ, một bước có thể thực hiện một lần kiểm tra thẻ và thêm vào điểm thẻ vào tài liệu. Bước khác có thể kiểm tra số dư trên các hợp đồng khác với cùng khách hàng và thêm vào tổng số
dư. Nếu sử dụng khóa mức nút, một số bước có thể được thực hiện song song. Tuy nhiên nếu khóa ở mức tài liệu thì bắt buộc các bước được thực hiện tuần tự để tránh xảy ra xung đột và như vậy có thể gây lên sự chậm trễ không thể chấp nhận được.
Khóa một nút thông thường đòi khỏi khóa cha của nó, và cứ như vậy thì sẽ quay trở lại khóa nút gốc, ảnh hưởng của việc khóa này lên toàn bộ tài liệu. Để
nhận ra tại sao điều này đúng như vậy thì chúng ta xem một giao tác đọc một nút lá. Nếu giao tác đó không đòi khóa trên các nút ông cha của nút lá, giao tác khác có thể xóa đi một nút ông cha của nó và đương nhiên là xóa cả chính nút lá đó. Rõ ràng là các giao tác nên cập nhật từng phần của tài liệu mà phần này không nằm trên đường dẫn trực tiếp từ gốc tới nút lá này.
Giải pháp cho vấn đề này được đưa ra bởi Stijn Dekeyser. Trong khi họ
không đòi hỏi phải tránh vấn đề khóa các nút ông cha của một nút đích một cách toàn bộ, họ làm cho việc khóa mềm dẻo hơn bằng việc chú thích chúng với truy vấn định nghĩa đường dẫn từ nút đã khóa tới nút đích. Điều này cho phép các tiến trình khác xác định được xem chúng có trùng với các giao tác đang bị khóa hay không.
Chú ý chỉ có số ít NXD hỗ trợ khóa mức nút.
"Các giao diện lập trình ứng dụng
Hầu hết NXD cung cấp các giao diện lập trình ứng dụng (API). Thường là các mẫu của một giao diện giống như ODBC, với các phương thức kết nối tới CSDL, hiển thị dữ liệu trừu tượng, thực thi truy vấn, và lấy kết quả. Các kết quảđược trả
về thường là một xâu XML, một cây DOM, hoặc một SAX Parser hoặc XMLReader. Nếu các truy vấn có thể trả lại nhiều tài liệu thì các phương thức cho tích hợp thông qua tập kết quả cũng sẵn sàng.
- XML:DB API của XML:DB.org là ngôn ngữ lập trình tự nhiên, sử dụng ngôn ngữ truy vấn XPath, và đang được mở rộng để hỗ trợ XQuery. Nó
được thực thi trên một số các NXD và có thể cũng được thực thi trên cả
các CSDL không nguyên bản.
- JSR 225: XQuery API for Java (XQJ) dựa trên JDBC và sử dụng ngôn ngữ truy vấn XQuery. Nó cũng được phát triển qua JCP (Java Community Process) của Sun và bản nháp đã sẵn sàng. Bởi vì khởi nguồn của cái này
đang được dẫn dắt bởi IBM và Oracle.
Hầu hết các NXD cũng hỗ trợ khả năng thực thi truy vấn và trả lại kết quả qua giao thức HTTP.
Khi nói đến NXD, ngoài các đặc tính đã liệt kê ở trên người ta thường quan tâm đến các đặc tính sau tiếp sau:
"Tính hoàn nguyên
Một đặc tính quan trọng của NXD là chúng có thể hoàn nguyên các tài liệu XML, nghĩa là chúng ta có thể lưu một tài liệu XML trong một NXD và lấy chính tài liệu đó từ trong NXD ra mà không bị bất kỳ một sự thay đổi nào. Điều này rất quan trọng với các ứng dụng hướng văn bản, giữ nguyên vẹn đoạn CDATA, chú thích và chỉ thị xử lý. Đặc biệt với các ứng dụng về luật pháp và y học tính chất này rất quan trọng vì các chúng đòi hỏi phải giữđược tính đúng đắn các bản copy của tài liệu.
Tính hoàn nguyên không quan trọng đối với các ứng dụng hướng dữ liệu vì các ứng dụng này nhìn chung chỉ quan tâm chỉ đến các phần tử, thuộc tính, văn bản và thứ tự phân cấp. Tất cả các phần mềm chuyển dữ liệu giữa các tài liệu và CSDL cũng có thể hoàn nguyên chúng.
NXD có thể hoàn nguyên các tài liệu ở mức các phần tử, thuộc tính, PCDATA và thứ tự tài liệu. Mức hoàn nguyên được hỗ trợ đến mức nào là tùy thuộc vào từng CSDL. Nhìn chung, các NXD dựa trên văn bản (text-based NXD) hoàn nguyên các tài liệu một cách chính xác trong khi NXD dựa trên mô hình (model-based NXD) hoàn nguyên các tài liệu ở mức mô hình tài liệu.
"Dữ liệu từ xa
Một số NXD có thể chứa dữ liệu từ xa trong các tài liệu trong CSDL. Thông thường đây là dữ liệu lấy được từ một CSDL quan hệ qua ODBC, OLE DB hoặc JDBC và được mô hình hóa sử dụng ánh xạ dựa trên bảng hoặc ánh xạ dựa trên
đối tượng [19]. Nếu dữ liệu đang tồn tại thì việc cập nhật tài liệu trong một NXD có được phản ánh trong CSDL từ xa hay không là tùy thuộc vào NXD. Hầu hết NXD có khả năng hỗ trợ dữ liệu thực từ xa.