Hướng dẫn SQL & XQuery cho IBM DB2, Phần 7: Giới thiệu về XML và XQuery Cơ sở của XML và truy vấn XML Jessica Cao, Chuyên viên phát triển các công cụ đào tạo, EMC Bruce Creighton, Chuy
Trang 1Hướng dẫn SQL & XQuery cho IBM DB2, Phần 7: Giới thiệu về XML và
XQuery
Cơ sở của XML và truy vấn XML
Jessica Cao, Chuyên viên phát triển các công cụ đào tạo, EMC
Bruce Creighton, Chuyên viên lập kế hoạch các phần kỹ năng, EMC
Pat Moffatt, Giám đốc Chương trình quản lý thông tin, Sáng kiến học đường, EMC
Tóm tắt: Hướng dẫn này giới thiệu pureXML và XQuery, bắt đầu từ một tổng
quan cơ bản của các đặc trưng và các lợi thế của kiểu dữ liệu XML, sau đó so sánh
nó với các bảng quan hệ tiêu chuẩn Rồi những người sử dụng được yêu cầu viết các XQuery để lấy ra các phần tử XML, lọc dữ liệu dựa vào các giá trị XML, biến đổi đầu ra XML, và sử dụng nhiều mệnh đề khác nhau để lựa chọn dữ liệu chính xác hơn Hướng dẫn kết thúc bằng một phần về phối hợp XQuery và SQL Hướng dẫn này là Phần 7 của loạt bài hướng dẫn SQL & XQuery cho IBM® DB2® (Chú ý: bạn phải cài đặt DB2 9 để làm các bài tập thực hành trong hướng dẫn này.)
Trước khi bạn bắt đầu
Về loạt bài này
Loạt bài hướng dẫn này dạy các chủ đề SQL từ cơ bản đến nâng cao và các chủ đề XQuery cơ bản Nó cũng chỉ ra cách diễn đạt các câu hỏi nghiệp vụ thường gặp bằng các truy vấn cơ sở dữ liệu sử dụng các câu truy vấn SQL hay các câu truy vấn XQuery Những người phát triển ứng dụng và những người quản trị cơ sở dữ liệu có thể sử dụng hướng dẫn này để nâng cao các kỹ năng truy vấn cơ sở dữ liệu của mình Các thành viên tham gia sáng kiến học đường IBM có thể sử dụng loạt hướng dẫn này như một phần trong chương trình giảng dạy cơ sở dữ liệu của họ
Tất cả các ví dụ trong bài này là dựa trên Aroma, một cơ sở dữ liệu mẫu chứa các
dữ liệu doanh thu về các sản phẩm cà phê và chè đã bán trong các cửa hàng trên khắp nước Mỹ Mỗi ví dụ gồm có ba phần:
Trang 2 Một câu hỏi kinh doanh dưới dạng ngôn ngữ thường ngày
Một hoặc nhiều ví dụ truy vấn , được biểu diễn bằng SQL hay Xquery
Một bảng các kết quả trả về từ cơ sở dữ liệu
Hướng dẫn này được thiết kế để cho phép các học viên học tập ngôn ngữ SQL và XQuery Cũng như học bất cứ cái gì khác, việc bổ sung thêm các bài tập thực hành
là rất quan trọng Dữ liệu và các định nghĩa bảng sẽ tạo điều kiện thuận lợi cho các bài tập thực hành này
Đối với các sinh viên sử dụng tài liệu này như một phần của khoá học, hãy nhận từ thầy hướng dẫn của mình các chỉ dẫn để kết nối tới cơ sở dữ liệu Aroma và tìm hiểu mọi sự khác biệt giữa hướng dẫn và cài đặt tại máy cục bộ của mình
Hướng dẫn này được viết cho Express-C 9 DB2 trên nền UNIX®, Linux® và Windows® (trước đây gọi là Viper)
Về hướng dẫn này
Hướng dẫn này giới thiệu cho người đọc làm quen với pureXML và XQuery Vị
trí duy nhất nơi XML được sử dụng trong cơ sở dữ liệu Aroma là các cột
Comments Cột này được đề cập trong Phần 1 của loạt bài này và đó là trọng tâm
của hướng dẫn này, Phần 7
Hướng dẫn này bắt đầu với một tổng quan cơ bản của các đặc trưng và lợi thế của kiểu dữ liệu XML, sau đó so sánh nó với các bảng quan hệ tiêu chuẩn Hướng dẫn này yêu cầu người đọc viết các XQuery để lấy ra các phần tử XML, lọc dữ liệu dựa vào các giá trị XML, biến đổi đầu ra XML, và sử dụng nhiều mệnh đề khác nhau để lựa chọn dữ liệu chính xác hơn Hướng dẫn này kết thúc bằng một phần
về phối hợp XQuery và SQL và kết hợp sức mạnh của cả hai ngôn ngữ đó
Kết nối tới một cơ sở dữ liệu
Trang 3Bạn cần kết nối tới một cơ sở dữ liệu trước khi có thể sử dụng các câu lệnh SQL
để truy vấn hay xử lý dữ liệu Lệnh CONNECT kết hợp một kết nối cơ sở dữ liệu với một tên người sử dụng
Thông qua người hướng dẫn tìm ra tên cơ sở dữ liệu bạn cần nối tới Đối với loạt bài này, tên cơ sở dữ liệu là aromadb
Để kết nối tới cơ sở dữ liệu aromadb, gõ lệnh sau đây vào trong bộ xử lý dòng lệnh DB2:
CONNECT TO aromadb USER userid USING password
Thay thế "userid" và "password" bằng số ID và mật khẩu của người sử dụng mà bạn đã nhận được từ thầy hướng dẫn Nếu máy không hỏi userid và password thì chỉ cần gõ vào lệnh sau đây:
CONNECT TO aromadb
Thông điệp sau báo cho bạn biết rằng đã tạo kết nối thành công:
Database Connection Information
Database server = DB2/NT 9.0.0
SQL authorization ID = USERID
Local database alias = AROMADB
Khi đã kết nối được, bạn có thể bắt đầu sử dụng cơ sở dữ liệu
Trang 4 có độ linh hoạt cao
phù hợp với tổ hợp bất kỳ các dữ liệu có cấu trúc, không có cấu trúc và nửa cấu trúc
dễ dàng mở rộng có thể định nghĩa các thẻ mới khi cần
có thể dễ dàng được biến đổi thành XML "khác" và thậm chí thành các định dạng khác như HTML
có thể dễ dàng được kiểm tra về sự tuân theo một lược đồ
Tất cả những điều này có thể thực hiện được thông qua nhiều công cụ và tiêu chuẩn có sẵn, như các bộ phân tách XML, XSLT, và lược đồ XML Chúng giải phóng các ứng dụng khỏi gánh nặng giải quyết những nét đặc biệt của các định dạng dữ liệu độc quyền sở hữu Trong một thời đại mà các định dạng thông báo, các biểu mẫu nghiệp vụ và các dịch vụ thường xuyên thay đổi, XML làm giảm chi phí và thời gian cần thiết để duy trì lôgíc ứng dụng một cách tương ứng
Ngoài việc sử dụng XML để trao đổi dữ liệu, các doanh nghiệp đang giữ một số lượng lớn các dữ liệu kinh doanh quan trọng theo định dạng XML Điều này có nhiều lý do:
Một số doanh nghiệp phải giữ lại các tài liệu XML theo định dạng nguyên bản của chúng để kiểm toán và tuân thủ các quy định, ví dụ các tài liệu tài chính và tư pháp cũng như eForms (biểu mẫu điện tử), đặc biệt trong khu vực chính phủ
XML có thể là một mô hình dữ liệu thích hợp hơn so với một lược đồ quan
hệ Điều này không chỉ đúng cho các ứng dụng hướng nội dung mà còn cho
cả một số ứng dụng hướng dữ liệu nhất định,
ví dụ, trong các ứng dụng khoa học đời sống, dữ liệu về bản chất có độ
Trang 5phức tạp và có cấu trúc thứ bậc rất cao và lại còn có thể chứa một lượng đáng kể các thông tin không có cấu trúc Hầu hết dữ liệu về hệ gen hiện nay vẫn còn được lưu giữ theo các định dạng tệp tin phẳng độc quyền sở hữu, nhưng đang có các nỗ lực để thực hiện chuyển chúng sang XML
Các cơ sở dữ liệu quan hệ đang tạo cơ hội hỗ trợ về lưu trữ, xử lý, tìm kiếm, và lấy
ra dữ liệu XML Điều này thường dựa vào việc lưu trữ các tài liệu XML trong các LOB hoặc chia nhỏ và sắp xếp XML vào một lược đồ quan hệ
Các giải pháp này có các hạn chế cố hữu về chức năng và hiệu năng Nói chung, việc lưu trữ dựa vào LOB cho phép chèn vào và lấy ra toàn bộ tài liệu nhanh
chóng nhưng phải chịu một hiệu năng thấp khi thực hiện tìm kiếm và trích ra, do phải phân tách XML trong khi thực hiện truy vấn Điều này có thể được cải thiện chút ít nếu các chỉ mục được tạo ra khi chèn tài liệu vào cơ sở dữ liệu Khi việc tạo chỉ mục đã gánh chịu công việc phân tách XML nói ở trên, nó có thể tăng tốc độ các truy vấn để tìm kiếm các tài liệu phù hợp với các điều kiện tìm kiếm đã cho Tuy vậy, việc trích ra các đoạn tài liệu và việc cập nhật ở mức dưới tài liệu vẫn đòi hỏi việc phân tách XML tốn kém
Trong các phần trước của loạt bài hướng dẫn này, bạn đã học về SQL bao gồm lệnh SELECT và ngôn ngữ định nghĩa dữ liệu (DDL) XML là một cách tổ chức
dữ liệu khác và sử dụng XQuery hay XPath để truy vấn dữ liệu
Dữ liệu quan hệ được trình bày như là các hàng và các cột dữ liệu theo định dạng bảng Dữ liệu XML bao gồm các thẻ và dữ liệu gắn với nhau
Trang 6<fname>Barbara</fname>
<lname>Adams</lname>
<phone>6138617611</phone>
Trang 7tả và dễ hiểu
Trang 8
DB2 9
DB2 9 là máy chủ dữ liệu lai đầu tiên, mức công nghiệp để quản lý dữ liệu theo cả định dạng quan hệ lẫn định dạng pureXML DB2 đã có các tính năng cao trong lưu trữ và truy nhập dữ liệu quan hệ dựa trên SQL tiêu chuẩn và tối ưu lưu trữ dữ liệu,
ví dụ như các kỹ thuật phân vùng dữ liệu, chỉ mục cao cấp và tối ưu hóa truy vấn Bây giờ, DB2 đưa vào thêm một cơ chế lưu trữ dữ liệu được tối ưu hóa cho dữ liệu XML bên cạnh cơ chế quan hệ hiện có
Những người phát triển ứng dụng bây giờ có thể lưu giữ dữ liệu XML trực tiếp bên trong một máy chủ DB2 và hưởng các lợi ích về các giao dịch, khả năng phục hồi nhanh dữ liệu cao cấp, truy nhập an toàn, và tất nhiên là khả năng tìm kiếm một số lượng lớn dữ liệu XML khi sử dụng XQuery
Dữ liệu XML so với dữ liệu quan hệ
Ba thuộc tính cơ bản của XML làm cho nó khác với mô hình quan hệ:
XML là tự mô tả Các tài liệu chứa đựng không chỉ dữ liệu, mà còn có
siêu dữ liệu cần thiết Kết quả là, một tài liệu XML có thể được tìm kiếm hay cập nhật không đòi hỏi một định nghĩa biểu đồ tĩnh Các mô hình quan
hệ, mặt khác, đòi hỏi các định nghĩa biểu đồ tĩnh hơn Tất cả các hàng của một bảng phải có cùng lược đồ
XML có phân cấp Các tài liệu không chỉ trình bày thông tin cơ bản, mà
còn cả thông tin về mối quan hệ của các mục dữ liệu với nhau dưới dạng phân cấp Các mô hình quan hệ yêu cầu biểu diễn tất cả thông tin quan hệ hoặc bằng các mối quan hệ khóa chính hoặc khóa ngoài hay bằng cách trình bày thông tin đó trong bảng quan hệ khác
XML là hướng chuỗi Thứ tự sắp xếp là quan trọng Mô hình quan hệ là hướng tập hợp, thứ tự sắp xếp không quan trọng
Không cái nào trong số các điểm khác biệt ấy biểu thị rằng XML là tốt hơn hơn hay xấu hơn so với các mô hình quan hệ thuần túy Thật ra, XML và mô hình quan
hệ là các giải pháp bổ sung nhau Một vài dữ liệu vốn đã phân cấp, trong khi dữ liệu khác lại có sẵn theo bảng; một số dữ liệu có lược đồ cứng, trong khi dữ liệu
Trang 9khác có lược đồ ít cứng nhắc hơn; một số dữ liệu cần tuân theo một thứ tự định trước trong khi dữ liệu khác lại không như vậy
Khi nào sử dụng XML
Việc trình bày dữ liệu XML có ích trong các hoàn cảnh sau:
Khi lược đồ hay thay đổi
Nếu lược đồ của dữ liệu thường thay đổi, thì việc trình bày dữ liệu dưới dạng quan hệ có thể khá phiền hà do các chi phí và khó khăn khi thay đổi lược đồ quan hệ đi kèm Bản chất tự mô tả của XML làm cho sự thay đổi lược đồ đơn giản hơn
Khi dữ liệu vốn đã phân cấp
Một vài dữ liệu có sẵn theo bảng và một mô hình quan hệ làm cho nó có ý nghĩa hơn Dữ liệu khác có phân cấp tự nhiên, và XML thường trình bày nó tốt nhất
Khi dữ liệu trình bày các đối tượng nghiệp vụ trong đó các bộ phận hợp
thành không còn có ý nghĩa nữa khi bị loại bỏ khỏi bối cảnh của chúng
Ví dụ, xem xét mối quan hệ thông thường giữa một nhân viên và số điện thoại của người đó, trong đó một nhân viên có thể có nhiều số điện thoại: một cho văn phòng, một cho Fax, một cho nhà, và một cho di động Nếu mẫu sử dùng thường xuyên nhất là để lấy ra các số điện thoại trong bối cảnh của một nhân viên, thì chằng có ý nghĩa gì khi chuẩn hóa dữ liệu và đưa vào hẳn một bảng để theo dõi vô số các số điện thoại liên quan đến một nhân viên Một sự lựa chọn tốt hơn có thể là giữ các số điện thoại ấy trong bảng nhân viên và trình bày chúng bằng XML
Khi các ứng dụng có thuộc tính thưa
Một số ứng dụng có một số lượng lớn các thuộc tính có khả năng nhưng hầu hết các thuộc tính đó xuất hiện thưa thớt hay vắng mặt với bất kỳ mục
dữ liệu đã cho nào Một ví dụ kinh điển là một tài liệu danh mục hàng hóa của thương gia; số lượng các thuộc tính khác nhau để theo dõi một mục của tài liệu đã cho là rất lớn, bao gồm kích thước, màu, sắc, kiểu dệt và các yêu cầu về năng lực và một danh sách gần như vô tận về các khía cạnh khác Đối với đối tượng đã cho bất kỳ, chỉ một tập con của các thuộc tính này có liên quan; kiểu dệt của một áo len làm cho nó có nghĩa nhưng kiểu dệt của một máy cắt cỏ thì chẳng có nghĩa gì Việc sử dụng một bảng quan hệ để
Trang 10mô tả các đặc tính của đối tượng có thể chi phí đắt và quá phức tạp Việc trình bày thông tin thuộc tính mô tả ấy như các dữ liệu XML cho phép trình bày tự nhiên hơn cũng như việc tìm kiếm ít phức tạp và ít tốn kém hơn
Khi dữ liệu khối lượng nhỏ nhưng có cấu trúc cao
Trong nhiều ứng dụng, thông tin có cấu trúc là điều quyết định đối với ứng dụng nhưng nó tồn tại với số lượng rất nhỏ Dù cho thông tin đó có thể được trình bày theo mô hình quan hệ bình thường, cách tiếp cận này có thể dẫn tới các lược đồ quan hệ cồng kềnh Việc sử dụng một cột XML với nhiều khung nhìn có thể làm giảm đáng kể số các đối tượng được quản lý trong một cơ sở dữ liệu, và như vậy giảm bớt chi phí về quyền sở hữu
Tạo ra một cơ sở dữ liệu có hỗ trợ XML
Trong Phần 1 của loạt tài liệu này, bạn đã tạo ra cơ sở dữ liệu Aroma của mình
với một tệp tin batch Vì bạn có thể muốn tạo ra các cơ sở dữ liệu riêng của mình trong tương lai, phần này hướng dẫn bạn cách tạo ra một cơ sở dữ liệu để hỗ trợ các đặc tính XML
Tạo một cơ sở dữ liệu với Trung tâm điều khiển
Trong ứng dụng Trung tâm điều khiển DB2, nhấp chuột phải vào vào thư mục All
Databases ChọnCreate Databse -> Standard Cửa sổ Create Database
Wizard sẽ bật lên Điền vào tên cơ sở dữ liệu của bạn và chọnt Enable database for XML
Trang 11Bộ mã XML
Nhấp Next hai lần để đi tới màn hình Region Đặt giá trị Country/Region tới giá trị thích hợp và thay đổi giá trị cài đặt bộ mã thành UTF-8 Nhấp UTF-8 Nhấp
Finish để hoàn thành tạo ra sở dữ liệu của bạn
Tạo ra một cơ sở dữ liệu với Bộ xử lý dòng lệnh
Để tạo ra cơ sở dữ liệu giống như vậy khi sử dụng CLP DB2, nhập vào mã sau đây:
db2 create db aromadb using codeset utf-8 territory us
Chú ý chỉ rõ UTF -8 làm bộ mã cho cơ sở dữ liệu Việc sử dụng các đặc tính XML chỉ hạn chế cho các cơ sở dữ liệu nào được định nghĩa dùng bộ mã UTF-8 và chỉ
có một phân vùng cơ sở dữ liệu Khi tạo ra các cơ sở dữ liệu riêng của bạn trong tương lai, đừng quên tính đến tham số này
Về cột comments
Trang 12Trong cơ sở dữ liệu Aroma, bảngSales có một cột được gọi là Comments (các ý
kiến góp ý)
Nó có thông tin sau :
Mã nhận diện của một góp ý (Comment ID)
Thông tin khách hàng: tên, thông tin tiếp xúc (điện thoại và/ hoặc email)
Trả lời của cửa hàng (Nếu yêu cầu)
Sự phản hồi của khách hàng: có thể hoặc là ý kiến, gợi ý hoặc câu hỏi
Đánh giá xếp hạng một cửa hàng theo 5 mức
Trang 14- các cửa hàng có thể yêu cầu thông tin đa dạng từ các khách hàng
- theo thời gian, các cửa hàng có thể cải tiến phương pháp của họ để nhận được ý kiến phản hồi, như vậy dẫn đến các kiểu dữ liệu khác nhau
- ví dụ, các khảo sát khuyến mại có thể khác với các khảo sát bán hàng thông thường; sự thay đổi này có thể dễ dàng được lưu trữ bằng XML chứ không phải bảng quan hệ
Trang 15 Sự phân cấp:
- dữ liệu có phân cấp tự nhiên
- thông tin khách hàng không có nghĩa nếu làm mất đi bối cảnh của ý kiến đóng góp
Các câu hỏi ví dụ
Các ý kiến góp ý được lưu trong cơ sở dữ liệu Aroma là gì?
Các ý kiến góp ý nhận được tại các cửa hàng New York là gì?
Các ý kiến góp ý nào yêu cầu cửa hàng trả lời? Những cái nào trong số các
ý kiến này chưa được giải quyết (trả lời) xong ?
Hiển thị tất cả các ý kiến góp ý chưa được giải quyết trong một danh sách HTML
Hiển thị tất cả các ý kiến góp ý và nhóm chúng lại thành ba loại khác nhau (bình luận, gợi ý và câu hỏi)
Đếm và hiển thị số lượng các ý kiến góp ý của mỗi kiểu
Tính toán và hiển thị trung bình mức xếp hạng do tất cả ý kiến góp ý đưa
XQuery khác với SQL về một số phương diện then chốt, phần lớn là do các ngôn ngữ này được thiết kế để làm việc với các mô hình dữ liệu khác nhau, mà các mô hình này có các đặc tính khác nhau Các tài liệu XML có chứa các mức phân cấp
Trang 16và sở hữu một thứ tự có sẵn Các cấu trúc dữ liệu dạng bảng được các DBMS dựa trên SQL hỗ trợ là phẳng và dựa trên tập hợp; vì thế, các hàng không theo thứ tự
Các sự khác nhau giữa các mô hình dữ liệu này dẫn đến một số khác biệt cơ bản trong các ngôn ngữ truy vấn riêng tương ứng của chúng Bảng ở dưới liệt kê một vài ví dụ
Hỗ trợ cả hai dữ liệu có định kiểu và
không định kiểu
Luôn luôn được định nghĩa với một kiểu cụ thể
Không cần các giá trị NULL vì các tài
liệu XML bỏ qua dữ liệu thiếu hoặc
không được biết
Hai loại biểu thức XQuery
Hướng dẫn này tập trung vào hai loại biểu thức XQuery quan trọng: các biểu thức
"FLWOR" và các biểu thức đường dẫn
Biểu thức FLWOR giống như một biểu thức SELECT-FROM-WHERE trong SQL nó được dùng để duyệt qua một danh sách các mục và trả về một vài thứ được tính toán từ mỗi mục tùy trường hợp Mặt khác, một biểu thức đường dẫn, dẫn hướng thông qua hệ phân cấp của các phần tử XML và trả về các phần tử tìm thấy ở cuối đường dẫn
Trang 17Giống như một biểu thức SELECT-FROM-WHERE trong SQL, biểu thức
XQuery FLWOR có thể chứa vài mệnh đề bắt đầu bằng các từ khóa nhất định Các
từ khóa sau đây được dùng để bắt đầu các mệnh đề trong một biểu thức FLWOR:
1 for Lặp lại một chuỗi nhập vào, chấp nhận một biến lần lượt cho mỗi danh
mục nhập vào
2 let Công bố một biến và gán cho nó một giá trị Giá trị này có thể là một
danh sách có nhiều danh mục
3 where Chỉ rõ tiêu chuẩn lọc các kết quả truy vấn
4 order
by Chỉ rõ thứ tự phân loại kết quả
5 return Định kết quả được trả về
Một biểu thức đường dẫn trong XQuery gồm có một loạt các "bước", phân cách nhau bằng các ký tự dấu gạch nghiêng Trong dạng đơn giản nhất của nó, mỗi bước dẫn hướng xuống dưới trong hệ phân cấp XML để tìm ra phần tử con của các phần tử do các bước trước trả về Mỗi bước trong một biểu thức đường dẫn có thể cũng chứa một thuộc tính để lọc các phần tử do bước đó trả về, chỉ giữ lại các phần tử thỏa mãn một điều kiện nào đó
Ví dụ, đối với dữ liệu mẫu cho trong phần trước, giả thiết rằng biến $comments gắn với một danh sách các tài liệu XML chứa các phần tử <comment> các phần
tử, tiếp theo là biểu thức đường dẫn bốn bước $comments/comment/feedback[type
= "suggestion"]/content sẽ trả về danh sách các nội dung về các ý kiến góp ý loại
"suggestion" (gợi ý)
Trong nhiều trường hợp, có thể sử dụng hoặc một biểu thức FLWOR hoặc một biểu thức đường dẫn để viết một truy vấn
Lấy ra các phần tử XML
Trang 20<email>CThomas@hotmail.com</email> </customer_info>