Tải bản đầy đủ (.doc) (26 trang)

TIỂU LUẬN MÔN CƠ SƠ DỮ LIỆU NÂNG CAO PURE XML TRONG DB2

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (520.73 KB, 26 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
PURE XML TRONG DB2
BÀI TẬP LỚN
MÔN: CƠ SỞ DỮ LIỆU NÂNG CAO

Cán bộ hướng dẫn: TS. Nguyễn Hà Nam .
Nhóm 10: Luyện Thị Lan Hương .
Khóa: 18
HÀ NỘI - 2012

Bảng các ký hiệu và chữ viết tắt
NXD Native Xml Database
XML eXtensible Markup Language
RDBMS Relational Database Management Systems
BLOB Binary Largr Object
Xpath XML Path Language
SQL Structured Query Language
Pure XML trong DB2
MỤC LỤC
5. CHÈN CÁC TÀI LIỆU XML

14
6. TRUY VẤN DỮ LIỆU XML

15
7. ĐÁNH CHỈ MỤC XML

19
8. LƯỢC ĐỒ XML


20
9. CÁC HỖ TRỢ XML KHÁC

23
Trang 1
Pure XML trong DB2
LỜ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ông
cầ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ác
phươ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ủa
chú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ệu
XML nguyên gốc(native XML database - NXD) và các hệ thống quản lý cơ sở dữ liệu
quan 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ứa
XML.
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ác
nhà 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 – like
structure), đượ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ôt
tà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ữ truy
vấ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ôn
ngữ đường dẫn XML (XML Path Language – Xpath 2.0). Cũng gống như ngôn ngữ truy
vấn có cấu trúc (Structured Query Language – SQL ), XQuery đẩy mạnh được sự độc lập

của nhà cung cấp và tái sử dụng .

Trang 2
Pure XML trong DB2
LÝ DO CHỌN CƠ SỞ DỮ LIỆU XML
Các cơ sở dữ liệu thường có thể lưu trữ được tài liệu không cấu trúc và có cấu trúc.
Cả hai đều yêu cầu các cấu trúc dữ liệu mà không thường xuyên thay đổi. Tuy nhiên,
đ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ên
cạ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ãn
hoặ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ệc
duy 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ành
phầ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 đến
mộ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ông
phụ 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ông
cấ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, đồng
nghĩ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 3
Pure XML trong DB2
Tuy 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ặt
chẽ 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ếu
khố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 ? Trong
trườ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 XML
hoặ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ụng
XQuery 1.0.
Trang 4
Pure XML trong DB2
CƠ 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 ghi
hoặ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ùng
củ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 cung
cấ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ác
sả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ùy
biế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ó cung
cấ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 dung

riê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 danh
tà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ành
khô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ách
tà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 5
Pure XML trong DB2
khó 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 đa
tà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ên
gố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ọ. DB2
Express – 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ện
XML đơ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ác
hà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ới
XML 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ạng
XML.
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ác
chứ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ứa
tà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 6

Pure XML trong DB2
DB2 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 7
Pure XML trong DB2
Hì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 XML
trong 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ệu
nă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 8
Pure XML trong DB2
Hì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ện
thoạ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 9
Pure XML trong DB2
mộ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ác
câ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.
Hình2. 4: Tăng cường tính linh động dữ liệu với XML.
4. Có thể cải thiện hiệu năng ứng dụng XML. Thực nghiệm cho thấy việc sử dụng công
nghệ pure XML giúp cải thiện đáng kể hiệu năng cho các ứng dụng XML. Bảng 2.1 đưa
ra kết quả thử nghiệm cho một công ty khi chuyển đổi từ những công nghệ cũ sang công
Trang 10
Pure XML trong DB2
nghệ pure XML. Cột thứ hai biểu diễn kết quả khi dùng phương pháp làm việc cũ với
XML trong một hệ quản trị cơ sở dữ liệu khác, và cột thứ ba biểu diễn các kết quả khi sử
dụng DB2 9 với pure XML.
Công việc Cơ sở dữ liệu quan hệ BD2 với pure XML

Phát triển các quá trình tìm
kiếm và trích rút thương mại
CLOB: 8 tiếng
Shred: 2 tiếng
30 phút
Số dòng mã I/O tương đối 100 35(giảm 65 %)
Thêm trường vào lược đồ 1 tuần 5 phút
Truy vấn 24 – 36 tiếng 20 giây – 10 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ình
bà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ạng
phâ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 11
Pure XML trong DB2
Hì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ạch
ché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ài
liệ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ộc
tí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.
Xpath Result
/dept/@bldg 101
/dept/employee/@id 901

902
/dept/employee/name <name>Peter Pan</name>
<name>John Doe</name>
/dept/employee/name/text() Peter Pan
John Doe
Trang 12
Pure XML trong DB2
Bảng 3.1: Một số ví dụ về biểu thức Xpath.
3.2. Các kí tự đại diện Xpath
Có hai kí tự đại diện trong Xpath:
“*” 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”)
Xpath Result
/dept/ employee /*/text() John Doe
408 555 1212
344
Peter Pan
408 555 9918
216
/dept/*/@id 901
902
//name/text() Peter Pan
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 13
Pure XML trong DB2
Cá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ức
Xpath. Để chỉ ra một vị từ chỉ vị trí, ta dùng [n], với nghĩa là phần tử con thứ n được
chọ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ểu
thứ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 con
của XQuery; do đó, mọi thứ chúng ta đã học trước đây về Xpath cũng được áp dụng
tương tự cho Xquery. XQuery hỗ trợ cả các loại dữ liệu định kiểu và dữ liệu không định
kiể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ỏ qua
cá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ới
biể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.
FLWOR là biểu thức cho phép thực hiện các thao tác với các tài liệu XML và trả về
một biểu thức khác.
5. Chèn các tài liệu XML
Trang 14
Pure XML trong DB2
Việc chèn các tài liệu XML vào cơ sở dữ liệu DB2 có thể được thực hiện bằng cách
sử dụng câu lênh SQL INSERT, hoặc tiện ích IMPORT. Xquery không được dùng cho
mục đích này bởi vì nó vẫn chưa được định nghĩa chuẩn.
6. 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ác
cộ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ợp
này, cần sử dụng SQL với các mở rộng XML(SQL/XML).
Trang 15
Pure XML trong DB2
Tê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.
XMLSERIALIZE Chuyển giá trị XML sang dạng dữ liệu kí tự
hay dữ liệu nhị phân của đối tượng lớn.
XMLVALIDATE Kiểm tra dữ liệu XML với lược đồ XML và
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ều
phần tử).
XMLQUERY Thực thi Xquery và trả về dãy kết quả.
XMLTABLE Thực thi Xquery và trả về dãy kết quả như
một bảng quan hệ (nếu có thể).
XMLCAST Ép kiểu từ kiểu XML
Bảng 6.1: Các hàm SQL/XML
Sử dụng cơ sở dữ liệu mydb đã tạo trước đây để thực hiện các ví dụ sau:
Ví dụ 1:
Giả sử cần xác định tên của tất cả khách hảng sóng ở vùng nào đó(có mã vũng -
zipcode). Bảng clients lưu địa chỉ khách hàng, bao gồm thông tin mã vùng trong một cột
XML. Ta có thể sử dụng hàm XMLEXITS để tìm mã vùng phù hợp trên cột XML và

trích rút kết quả trả về theo đó.
Câu lệnh SQL tương ứng
SELECT name FROM clients
WHERE xmlexists(
'$c/Client/Address[zip="95116"]'
passing clients.contact as "c" )
Trong câu lệnh SQL trên, dòng đầu tiên là mệnh đề SQL chi ra rằng muốn lấy thông
tin cột name trong bảng clients.
Trang 16
Pure XML trong DB2
Mệnh đề WHERE gọi hàm XMLEXITS, chỉ định rõ biểu thức Xpath yêu cầu DB2
tìm phần tử zip có giá trị 95116.
Mệnh đề $c/Client/Address chỉ ra đường dẫn trong cấu trúc phân cấp của tài liệu
XML để DB2 có thể tìm ra phần tử zip. Kí tự ($) được sử dụng để chỉ định một biến. Biến
“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út
Address, 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.
Ví dụ 1
Sử dụng biểu thức FLWOR để lấy dữ liệu fax của khách hàng
xquery
for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/fax
return $y
Trang 17
Pure XML trong DB2
Dòng đầu tiên gọi đến bộ phân tích XQuery. Dòng thứ hai yêu cầu DB2 lặp hết các
phần tử con fax chứa trong cột CLIENTS.CONTACT.Mỗi phần từ fax được gán vào
biến $y. Dòng thứ ba nói rằng giá trị biến $y sẽ được trả về trong mỗi lần lặp.
Kết quả truy vấn được minh họa như sau:
<fax>4081112222</fax>
<fax>5559998888</fax>
Ví dụ 2
Ví dụ này chỉ ra cách nhúng SQL vào XQuery bằng việc sử dụng hàm db2-
fn:sqlquery. Hàm db2-fn:sqlquery thực thi một truy vấn SQL và chỉ trả về những dữ liệu
XML được chọn. Truy vấn SQL được truyền vào hàm db2-fn:sqlquery phải trả về dữ
liệu XML. Sau đó, dữ liệu XML này sẽ được XQuery xử lý. Điều này được minh họa
như sau:
xquery
for $y in
db2-fn:sqlquery(
‘select comments from items where srp > 100’
)/Comments/Comment
where $y/ResponseRequested=‘Yes’
return (
<action>
{$y/ProductID
$y/CustomerID

$y/Message}
</action>
)
Chú ý:
Trang 18
Pure XML trong DB2
SQL không phân biệt kí tự hoa, kí tự thường và DB2 lưu trữ tất cả các tên bảng và
tên cột mặc định bằng chữ hoa. Nhưng Xquery lại phân biệt kí tự hoa, kí tự thường. Các
hàm trên đây là các hàm giao diện của Xquery, vậy nên các tên bảng và tên cột truyền vào
hàm phải được chuyển thành chứ hoa. Truyền tên đối tượng ở dạng chữ thường có thể gây
ra lỗi tên đối tượng không xác định.
7. Đánh chỉ mục XML
Trong tài liệu XML, các chỉ mục có thể được tạo cho các phần tử, các thuộc tính,
hoặc cho các giá trị (text node – các nút văn bản).
Giả sử rằng ta đã tạo bảng sau: CREATE TABLE customer(info XML)
Và giả sử tài liệu XML sau đây là một trong các tài liệu được lưu ở bảng trên.
<customerinfo Cid="1004">
<name>Matt Foreman</name>
<addr country="Canada">
<street>1596 Baseline</street>
<city>Toronto</city>
<state>Ontario</state>
<pcode>M3Z-5H9</pcode>
</addr>
<phone type="work">905-555-4789</phone>
<phone type="home">416-555-3376</phone>
<assistant>
<name>Peter Smith</name>
<phone type="home">416-555-3426</phone>
</assistant>

</customerinfo>
Câu lệnh tạo ra một chỉ mục cho thuộc tính Cid là:
CREATE UNIQUE INDEX idx1 ON customer(info)
Trang 19
Pure XML trong DB2
GENERATE KEY USING
xmlpattern '/customerinfo/@Cid'
AS sql DOUBLE
Câu lệnh tạo ra một chỉ mục cho phần tử name là:
CREATE INDEX idx2 ON customer(info)
GENERATE KEY USING
xmlpattern '/customerinfo/name'
AS sql VARCHAR(40)
Câu lệnh tạo một chỉ mục cho tất cả các phần tử name là:
CREATE INDEX idx3 ON customer(info)
GENERATE KEY USING
xmlpattern '//name'
AS sql VARCHAR(40);
Câu lệnh tạo ra một chỉ mục cho tất cả các nút văn bản(tất cả các giá trị) là:
CREATE INDEX idx4 ON customer(info)
GENERATE KEY USING
xmlpattern '//text()'
AS sql VARCHAR(40);
Khuyến cáo rằng không nên tạo chỉ mục cho tất cả các nút văn bản, vì sẽ mất rất
nhiều chi phí cho việc duy trì chỉ mục cho các thao tác update, delete, insert và chỉ mục
có thể quá lớn.
8. Lược đồ XML
DB2 cho phép chèn một tài liệu XML vào cơ sở dữ liệu nếu nó tuân theo định dạng
đúng(wel - formed). Nếu không, bạn sẽ nhận được một lỗi tại thời điểm chèn. Mặt khác,
DB2 không đòi hỏi phải kiểm tra tính hợp lệ của tài liệu XML. Nếu muốn kiểm tra, có thể

thực hiện một số phương án thay thế.
8.1 Đăng kí lược đồ
Trang 20
Pure XML trong DB2
Các lược đồ XML (XMLSchemas) được lưu trong các cơ sở dữ liệu DB2 , trong kho
lược đồ XML(XML Schema repository). Để thêm một lược đồ XML vào kho, sử dụng
lệnh :
REGISTER XMLSCHEMA.
8.2 Kiểm tra tính hợp lệ theo lược đồ XML
Khi đã đăng ký lược đồ XML trên DB2, có thể kiểm tra tính hợp lệ cho tài liệu
XML theo hai cách sau:
 Sử dụng hàm XML VALIDATE trong câu lệnh INSERT.
 Sử dụng một bẫy sự kiện BEFORE.
Trang 21
Pure XML trong DB2
Hình 8.2 Kiểm tra tính hợp lệ theo lược đồ XML sử dụng XML VALIDATE
Để kiểm tra một tài liệu XML có hợp lệ hay không, có thể sử dụng vị từ IS
VALIDATE trong ràng buộc CHECK.
Có thể kiểm tra tính hợp lệ cho các tài liệu XML trong một cột sử dụng nhiều lược đồ
XML khác nhau, điều này có ý nghĩa quan trọng trong sự chuyển đổi dễ dàng của một
lược đồ XML từ phiên bản 1 sang phiên bản 2. Trong cùng một XML, ta có thể tìm thấy
Trang 22
Pure XML trong DB2
những tài liệu XML không hề được kiểm tra tính hợp lệ. Điều này rất hữu dụng nếu các
tài liệu được nhận từ những nguồn đáng tin cậy và cả những nguồn không đáng tin cậy,
trong khi chỉ các bước xử lý sau đó mới cần kiểm tra tính hợp lệ của tài liệu này theo lược
đồ.
9. Các hỗ trợ XML khác
Các tài liệu XML nhỏ có thể được lưu trực tiếp cùng với bảng cơ sở. Điều này có
nghĩa là dữ liệu XML được lưu trữ trong cùng vị trí như các dữ liệu quan hệ, và có thể tận

dụng các cơ chế nén tương tự như với dữ liệu quan hệ chuẩn. Các tài liệu XML lớn hơn
được lưu trữ trong đối tượng nội bộ riêng biệt, và đối tượng này cũng có thể được nén.
DB2 cũng hỗ trợ tiến hóa lược đồ XML. Điều này có nghĩa là: nếu lược đồ XML thay
đổi, ta có thể cập nhật dễ dàng với lệnh UPDATE XMLSCHEMA. Nếu những thay đổi tới
lược đồ XML quá mạnh, có thể bị lỗi.
Trong DB2, sự phân rã XML(XML decomposition / shredding) cũng được hỗ trợ.
Đây là phương pháp “cũ” để lưu trữ XML trong các cơ sở dữ liệu, và cũng là cách mà các
nhà cung cấp khác sử dụng để lưu trữ XML. DB2 vẫn hỗ trợ phương pháp này nếu người
dùng muốn sử dụng, tuy nhiên ta nên sử dụng pure XML. DB2 cũng hỗ trợ mở rộng
XML( XML Extender) và cũng sử dụng phương pháp cũ để lưu trữ XML, nhưng mở rộng
này sẽ không còn được cải tiến nữa.
Với DB2 9.7 tất cả các lợi ích của pureXML đã được mở rộng đến các phân vùng
cơ sở dữ liệu thường sử dụng cho kho dữ liệu. chức năng phân vùng cơ sở dữ liệu
(Database Partitioning Feature - DPF) được cung cấp trong phiên bản DB2 Enterprise
Edition.
TỔNG KẾT
Việc sử dụng XML đang tăng lên theo cấp số nhân với các công cụ Web 2.0 và các
công nghệ như SOA. Bằng cách lưu trữ tài liệu XML trong cơ sở dữ liệu DB2, ta có thể
tận dụng lợi thế bảo mật, lợi thế về hiệu năng hoạt động cũng như lập trình linh hoạt bẳng
Trang 23

×