Trong những năm đầu tiên của cơ sở dữ liệu XML, sự khác biệt gữa cơ sở dữ liệuXML nguyên gốcnative XML database - NXD và các hệ thống quản lý cơ sở dữ liệuquan hệ có hỗ trợ XML relationa
Trang 2Bảng các ký hiệu và chữ viết tắt
NXD Native Xml Database
RDBMS Relational Database Management Systems
Trang 4LỜI MỞ ĐẦU
Ngày này, một số hệ thống đòi hỏi cần lưu trữ các dữ liệu bán cấu trúc mà khôngcần phải ép nó vào các cấu trúc dữ liệu không phù hợp Các yêu cầu này đều được đápứng bởi cả cơ sở dữ liệu XML nguyên gốc và cơ sở dữ liệu quan hệ hỗ trợ XML Vấn đềđặt ra là : Tại sao bạn lại thích một cơ sở dữ liệu XML nguyên gốc hơn là một cơ sở dữliệu cổ điển với hỗ trợ XML hoặc các cách khác? Đề tài này đề cập đến việc so sánh cácphương pháp tiếp cận khác nhau, bao gồm eXist, Mark Logic và IBM-DB2ExpressC Sựkhác biệt cảu các kiểu cơ sở dữ liệu được so sánh giữa những thuận lợi và khó khăn củachúng
Trong những năm đầu tiên của cơ sở dữ liệu XML, sự khác biệt gữa cơ sở dữ liệuXML nguyên gốc(native XML database - NXD) và các hệ thống quản lý cơ sở dữ liệuquan hệ có hỗ trợ XML (relational database management systems - RDBMS) là rất lớn Các NXD được tối ưu hóa để lưu trữ các tài liệu XML Các bản RDBMS cũ chỉ thêm một
số kiểu dữ lieu (như các đối tượng nhị phân lớn binary largr object - BLOB) để chứaXML
Ngày nay, các NXD vẫn là NXD nhưng được cải tiến rất nhiều Cùng thời điểm, cácnhà cung cấp RDBMS cũng có thể lưu trữ các tài liệu XML Các phần tử XML không cònđược lưu trữ trong các BLOBs mà được lưu trữ trong các cấu trúc cây (tree – likestructure), được tối ưu hóa để chứa các tài liệu có cấu trúc cây, bản chất tự nhiên của môttài liệu XML chuẩn
Một số nền tảng đã được phát triển cùng với sự chuẩn hóa của các ngôn ngữ truyvấn trên tài liệu XML, trong đó đáng chú ý nhất là XQuery 1.0 với sự hỗ trợ của ngônngữ đường dẫn XML (XML Path Language – Xpath 2.0) Cũng gống như ngôn ngữ truyvấn có cấu trúc (Structured Query Language – SQL ), XQuery đẩy mạnh được sự độc lập
Trang 5điểm yếu của cơ sở dữ liệu quan hệ là việc lưu trữ các tài liệu bán cấu trúc Không nhưcác dữ liệu có cấu trúc, các tài liệu bán cấu trúc có thể có rất nhiều bậc tự do trong trật tựcủa các thành phần trong tài liệu và cách những thành phần đó được lồng vào nhau Bêncạnh đó, nó cũng không giống những dữ liệu không có cấu trúc vì các thành phần riêng lẻcủa nó đều có thể được phân loại bằng cách sử dụng các nhãn mô tả.
Vậy có thể lưu trữ dữ liệu bán cấu trúc trong các cấu trúc quan hệ không?
Tất nhiên là có thể, nhưng có thể kết thúc bằng một cấu trúc dữ liệu cụ thể màthường xuyên thay đổi, một cấu trúc dữ liệu tổng quát hóa mà làm mất mô tả của các nhãnhoặc một mô hình trừu tượng như là những thứ mà các hệ thống quản lý nội dung sửdụng, trộn dữ liệu với những thứ mà đáng ra là siêu dữ liệu (metadata)
Mặt khác, định dạng XML lại phù hợp với việc mô tả dữ liệu bán cấu trúc, mà việcduy trì mô hình dữ liệu này lại khá dễ dàng Thêm vào đó, việc thêm các tên của thànhphần không làm thay đổi cấu trúc dữ liệu – nó luôn giữ cấu trúc cây Nó chỉ lien quan đếnmột sự thay đổi trong lược đồ XML mô tả cách thức mà các tên của phần tử được sử dụng
và liên kết bên trong cấu trúc cây
Với các tài liệu có lượng dữ liệu ở quy mô vừa và nhỏ như các hồ sơ xin việc, các
mô tả sản phầm… XML là định dạng khá phù hợp Đồng thời, XML có khả năng mô tả
cả dữ liệu có cấu trúc và dữ liệu không có cấu trúc
Vậy có cần các cơ sở dữ liệu quan hệ nữa không?
Khi tạo một giải pháp phần mềm mới, việc có chọn cơ sở dữ liệu quan hệ hay khôngphụ thuộc vào việc giải pháp đó cho phép lưu trữ dữ liệu như thế nào (có cấu trúc, khôngcấu trúc hay bán cấu trúc) Nếu giải pháp đó cho phép lưu trữ dữ liệu bán cấu trúc, đồngnghĩa với việc nó có thể sử dụng để lưu dữ liệu có cấu trúc và không có cấu trúc
Trang 6Tuy nhiên, nếu phần lớn dữ liệu lại phù hợp với mô hình quan hệ có cấu trúc chặtchẽ và có ràng buộc với nhau thì việc sử dụng NXD lại không phù hợp.
Vậy làm thế nào để xác định bản chất dữ liệu của hệ thống muốn xây dựng? Và nếukhối lượng dữ liệu có cấu trúc, bán cấu trúc, không cấu trúc là tương đương ? Trongtrường hợp này, các cơ sở dữ liệu cổ điển lại là lựa chọn hù hợp để chứa dữ liệu XMLhoặc phân mảnh của các tài liệu XML Tuy cách thức truy cập vào các phân mảnh XML
là khác nhau giữa các cơ sở dữ liệu, nhưng giữa chúng đều có chung điểm là sử dụngXQuery 1.0
Trang 7CƠ SỞ DỮ LIỆU NGUYÊN GỐC
Theo Wikipedia, “một cơ sở dữ liệu máy tính là một tập hợp có cấu trúc các bản ghihoặc dữ liệu được lưu trữ trong một hệ thống máy tính” XML nguyên gốc là cách dùngcủa các công nghệ liên quan đến XML mà không pha tạp với các công nghệ phi XML.Tức là khả năng sử dụng XQuery và XPath mà không có một chút SQL nào
Khi so sánh các NXD với RDBMS có hỗ trợ XML, người ta cho rằng một NXD
điển hình cũng có thể được phân loại như là một kho chứa tài liệu Thuật ngữ “ kho chứa
tài liệu” được sử dụng bởi các sản phẩm như Alfresco và Magnolia Các sản phẩm này
được xếp lớp trên cả các cơ sởc dữ liệu hiện có, và chúng thiếu cơ sở hạ tầng được cungcấp bởi eXits và Mark Logic – đáng chú ý nhất là khả năng chạy các XQuery một cách cóhiệu quả Chúng tập trung vào các chức năng bậc cao như là luồng làm việc (workflow)
và giao diện người dùng thân thiện Các NXD dành những thứ đó cho các người dùng cácsản phẩm của mình Chúng chỉ cung cấp các hàm API chứa tài liệu bậc thấp, như là Web– based Distributed Authoring and Versioning(Web DAV) hoắc các kết nối REST ful tùybiến
Như vậy, một NXD điển hình lưu trữ các tài liệu XML một cách hiệu quả Nó cungcấp công nghệ XQuery và một lớp mỏng các chức năng kho dữ liệu
NXD dường như nhắm tới tài nguyên theo định hướng, nghĩa là các phần nội dungriêng được lưu trữ trong kho chứa có thể được xác định bằng cách sử dụng các định danhtài nguyên đồng bộ (Uniform Resource Identifier - URI) Sử dụng HTTP hoặc Web DAV,các URI tương tự cho phép truy cập tới dữ liệu cái mà làm cho tính kết nối trở thànhkhông vấn đề
Coi dữ liệu như là các tài nguyên đơn lẻ cũng có các yếu điểm của nó Sự chia táchtài liệu làm cho việc tạo quan hệ giữa các dữ liệu mà bị chia nhỏ khắp các đa liệu trở nên
Trang 8khó khăn Nếu một tài liệu chứa các dữ liệu độc quyền mà các tài liệu khác tham chiếuđến, thì việc duy trì tính tích hợp tham chiếu càng khó khăn hơn Các nhà sản xuất cơ sở
dữ liệu XML lớn cung cấp các lựa chọn để đặt các ràng buộc trên các dữ liệu trong các đatài liệu Tuy nhiên, điều này chưa được tiêu chuẩn hóa như các công nghệ XML khác
PURE XML
IBM lựa chọn thuật ngữ Pure XML để tránh thuật ngữ cơ sở dữ liệu XML nguyêngốc nhưng vẫn muốn truyền tải bản chất nguyên gốc của XML cho giải pháp của họ DB2Express – C là một điển hình cho NXD, nhưng nó lại chia sẻ một số đặc tính Ở một góc
độ, DB2 dường như giống một RDBMS với các cột XML
Tên pureXML được chính thống hóa theo hai cách:
1 Dữ liệu XML được lưu trữ trong định dạng cây nguyên bản, tách biệt khỏi dữliệu quan hệ
2 Được phép truy cập tất cả dữ liệu – cả quan hệ và XML thông qua một giao diệnXML đơn nhất
XQuery 1.0 không bị giới hạn bởi việc truy vấn các tài liệu XML IBM cung cấp cáchàm XQuery mà cho phép truy vấn dữ liệu quan hệ và trộn và đối chiếu các kết quả vớiXML từ các cột XML Kết quả của dữ liệu kết hợp có thể được trả lại trong định dạngXML
DB2 là nền tảng cơ sở dữ liệu nguyên bản Nó không cung cấp một lớp mỏng cácchức năng chứa tài liệu mà rất nhiều NXD khác cung cấp Hiện nay, hầu hết các kho chứatài liệu như Alfresco được cài đặt trên các RDBMS không hỗ trợ XML hơn là các NXD
Trang 9DB2 PURE XML
1 XML trong DB2
Hình 1: XML trong DB2.
Hiện nay có 4 cách truy cập dữ liệu được sử dụng trong DB2 9 :
Sử dụng SQL để truy nhập dữ liệu quan hệ
Sử dụng SQL và các mở rộng XML(SQL/ XML) để truy nhập dữ liệu XML
Sử dụng Xquery để truy nhập dữ liệu XML
Sử dụng Xquery để truy nhập dữ liệu quan hệ
Trang 10Hình 2: Bốn cách truy nhập dữ liệu trong DB2.
Như vậy, nếu đứng trên phương diện người sử dụng SQL, có thể xem DB2 như một
hệ quản trị cơ sở dữ liệu cấp cao có hỗ trợ XML Nếu đứng trên phương diện người sửdụng XML, bạn có thể xem DB2 như kho lưu trữ XML cấp cao hỗ trợ SQL
IBM sử dụng khái niệm pure XML thay vì khải niệm thuần XML(native XML) để
mô tả công nghệ này Các nhà cung cấp khác vẫn sử dụng các công nghệ cũCLOB/varchar hay phân rã để lưu trữ các tài liệu XML, họ gọi những công nghệ cũ đó làthuần XML Để tránh nhầm lần, IBM đã quyết định sử dụng khái niệm mới pure XML, vàđặt thương hiệu cho khái niệm này để các nhà cung cấp cơ sở dữ liệu và XML khác có thể
sử dụng nó để gợi đến một công nghệ mới, pure XML hỗ trợ các cơ sở dữ liệu được sinh
ra dưới cả hai định dạng Unicode và non-Unicode
2 Ưu điểm của công nghệ pure XML.
Công nghệ pure XML đem lại nhiều ưu điểm như sau:
1 Có thể nâng cao khả năng sử dụng dữ liệu quan hệ, bằng cách lưu trữ các tài liệu XMLtrong các cột của các bảng, sử dụng kiểu dữ liệu mới XML
2 Có thể giảm sự phức tạp của mã lệnh Ví dụ hình 2.3 minh họa một đoạn PHP có sử
dụng và không sử dụng pure XML Sử dụng pure XML(khung nhỏ bên trái), số dòng mãlệnh được giảm Điều này không chỉ có nghĩa là mã lệnh ít phức tạp hơn, mà tổng hiệunăng cũng được cải thiện,vì số dòng được phân tích và bảo trì trong mã lệnh cũng ít hơn
Trang 11Hình 2.3: Sự phức tạp của mã lệnh có sử dụng và không sử dụng pure XML.
3 Những thay đổi tới lược đồ dễ dàng hơn khi sử dụng XML và công nghệ pureXML
Hình 2.4 là một ví dụ minh họa về sự tăng cường tính linh động này Trong hình, giả sử
bạn có một cơ sở dữ liệu bao gồm các bảng Employee và Department Điển hình với loại
cơ sở dữ liệu không có XML, nếu nhà quản lý yêu cầu bạn lưu trữ không chỉ một số điệnthoại cho một nhân viên(số điện thoại bàn) mà còn lưu trữ thêm số điện thoại thứ hai khác
(số di động), bạn có thể thêm một cột trong bảng Employee va lưu trữ số di động trong
Trang 12một cột mới Tụy nhiên, phương pháp này vi phạm các quy tắc chuẩn hóa cơ sở dữ liệu
quan hệ Nếu muốn giữ quy tắc đó, bạn phải tạo một bảng phụ mới, bảng Phone, và
chuyển tất cả thông tin về số điện thoại vào bảng này Tạo thêm bảng mới sẽ tốn chi phí,không chỉ bởi vì phải di chuyển số lượng lớn các dữ liệu đã tồn tại, mà còn vì tất cả cáccâu lệnh SQL trong ứng dụng cũng sẽ phải thay đổi để trỏ đến bảng mới
Thay vào đó, ta có thể thực hiện điều này bằng cách sử dụng XML như ở phía bên trái
hình dưới đây Nếu nhân viên Christine cũng có môt số di động, ta thêm một thẻ mới để lưu thông tin này Nếu nhân viên Michael không có số điện thoại di động, ta sẽ để
nguyên
Trang 13Phát triển các quá trình tìm
kiếm và trích rút thương mại
CLOB: 8 tiếngShred: 2 tiếng
30 phút
Bảng 2.1: Tăng hiệu năng khi sử dụng công nghệ pureXML
3 Cơ bản về Xpath
Xpath là một ngôn ngữ có thể được sử dụng để truy vấn các tài liệu XML Hình 3.1
dưới đây mô tả một tài liệu XMl, và hình 3.2 minh họa cùng tài liệu đó nhưng được trìnhbày dưới dạng phân tích phân cấp (còn gọi là “nút” và “lá”) Chúng ta sẽ dùng định dạngphân tích phân cấp đó để giải thích cách thức Xpath làm việc như thế nào:
Hình 3.1: Tài liệu XML
Trang 14Hình 3.2: Biểu diễn phân tích phân cấp cho tài liệu XML trong liệt kê ở hình 3.1.
Tương tự với cái lệnh duyệt cây thư mục trong DOS, với Xpath, ta sử dụng dấu gạchchép (/) để chuyển từ phần tử này đến phần tử khác trong tài liệu XML Ví dụ, sử dụng tàiliệu trong liệt kê ở hình 3.1 với Xpath, có thể đưa ra tên của tất cả các nhân viên với truy
vấn : /dept/employee/name.
3.1 Các biểu thức Xpath
Biểu thức Xpath sử dụng đường dẫn đầy đủ để xác định các phần tử và các thuộctính Kí hiệu”@” được dùng để chỉ định một thuộc tính Để lấy riêng giá trị (textnode)
của một phần tử, ta sử dụng hàm text() Bảng 3.1 đưa ra các truy vấn Xpath và các kết
quả tương ứng khi áp dụng trên tài liệu được liệt kê ở bảng 3.1
Trang 15“*” thay thế cho bất kì tên thẻ nào.
“//” là kí tự đại diện cho “từ đây trở xuống”(“descendent – or - self”)
408 555 1212
344 Peter Pan
408 555 9918 216
902
John Doe/dept//phone <phone>408 555 1212</phone>
<phone>408 555 9918</phone>
Hình 3.2: Một số ví dụ về ký tự đại diện Xpath.
3.3 Các vị từ Xpath
Trang 16Các vị từ được đặt trong dấu ngoặc vuông [] Như một phép so sánh tương tự, có thểnghĩ chúng tương đương với mệnh để “where” trong SQL Ví dụ, [@id =”902”] có thểđược hiểu là ở đâu thuộc tính id bằng 902 Có thể có nhiều vị từ trong một biểu thứcXpath Để chỉ ra một vị từ chỉ vị trí, ta dùng [n], với nghĩa là phần tử con thứ n đượcchọn Ví dụ, employee[2] nghĩa là nhân viên thứ 2 được chọn.
4 Cơ bản về XQuery
XQuery là ngôn ngữ truy vấn được tạo ra dành cho XML XQuery hỗ trợ các biểuthức đường dẫn để duyệt cấu trúc phân cấp của XML Trên thực tế, XPath là một tập concủa XQuery; do đó, mọi thứ chúng ta đã học trước đây về Xpath cũng được áp dụngtương tự cho Xquery XQuery hỗ trợ cả các loại dữ liệu định kiểu và dữ liệu không địnhkiểu XQuery không hỗ trợ các giá trị null bởi vì các tài liệu XML mặc nhiên sẽ bỏ quacác dữ liệu không xác định hoặc bị thiếu Các biểu thức Xquery và Xpath có phân biệt kí
tự hoa và kí tự thường và Xquery sẽ trả về chuỗi dữ liệu XML tuần tự
XQuery hỗ trợ biểu thức FLWOR Nếu so sánh với SQL, FLWOR tương đương vớibiểu thức SELECT – FROM – WHERE Phần tiếp theo sẽ mô tả cụ thể hơn về FLWOR
XQuery: Biểu thức FLWOR.
FLWOR là viết tắt của:
FOR: thực hiện lặp qua một chuỗi, gán một biến cho phần tử chuỗi
LET: gán một biến cho một chuỗi
WHERE: loại bỏ các phần tử trong vòng lặp
ORDER: sắp xếp lại trật tự các phần tử trong vòng lặp
RETURN: xây dựng các kết quả truy vấn
Trang 176 Truy vấn dữ liệu XML
Trong DB2 có hai cách để truy vấn dữ liệu XML:
Sử dụng SQL với các mở rộng XML(SQL/XML)
Sử dụng Xquery
6.1 Truy vấn dữ liệu XML với SQL/XML
Sử dụng các câu lệnh SQL thông thường cho phép bạn làm việc với các dòng và cáccột Một câu lệnh SQL có thể làm việc được với toàn bộ tài liệu XML đầy đủ; tuy nhiên,SQL sẽ không thể giúp bạn làm việc chỉ với một phần tài liệu XML Trong trường hợpnày, cần sử dụng SQL với các mở rộng XML(SQL/XML)
Trang 18Tên hàm Mô tả
XMLPARSE Phân thích dữ liệu kí tự hay dữ liệu nhị
phân của đối tượng lớn, lấy ra giá trị XML
hay dữ liệu nhị phân của đối tượng lớn
ghi chú kiệu của giá trị XML
XMLEXISTS Kiểm tra xem Xquery có trả về kết quả
không (ví dụ, một dãy có một hoặc nhiềuphần tử)
-Câu lệnh SQL tương ứng
SELECT name FROM clients
Trang 19“c” được định nghĩa bởi dòng : passing clients.contact as "c" Trong đó, clients là tên
bảng và contact là tên cột có kiểu XML Nói cách khác, ta gán tài liệu XML cho biến “c”.DB2 kiểm tra tài liệu XML chứa trong cột contact, duyệt từ nút gốc Client xuống nútAddress, sau đó là zip và cuối cùng xác định xem khách hàng có sống ở vùng có mã vùng
cần tìm hay không Nếu hàm XMLEXITS trả về ”true”, DB2 sẽ lấy ra tên khách hàng
tương ứng
Trong DB2 9.5 câu truy vấn trên có thể viết đơn giản như sau:
SELECT name FROM clients
WHERE xmlexists(
'$CONTACT/Client/Address[zip="95116"]'
)
DB2 sẽ tự động tạo ra một biến có cùng tên với tên cột XML Trong ví dụ trên, DB2
tự động tạo ra biến CONTACT có tên trùng với tên cột XML CONTACT.
6.2 Truy vấn dữ liệu XML với Xquery
XQuery sẽ được coi là phương pháp truy vấn chính và trong một số trường hợp, ta
có thể sử dụng SQL nhúng bên trong hàm Xquery(sử dụng hàm db2-fn:sqlquery) Khi sử
dụng XQuery, ta sẽ gọi một số hàm và cũng sẽ sử dụng biểu thức FLWOR