Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 68 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
68
Dung lượng
1,2 MB
Nội dung
Chuẩn bị cho kỳ thi 730 cơ bản về DB2 9, Phần 7: Giới thiệu về XQuery C. M. Saracco, Kỹ sư phần mềm, IBM 硅谷实验室 Tóm tắt: Các đặc tính DB2® 9 hỗ trợ cho XQuery, một ngôn ngữ chuẩn công nghiệp được thiết kế cốt để cho việc truy vấn dữ liệu XML. Với XQuery và DB2 9, bạn có thể lấy toàn bộ các tài liệu XML hoặc các phân đoạn XML đã lưu trữ trong các cột XML. Bạn cũng có thể chỉ rõ các bộ lọc dựa trên XML cho các truy vấn, chuyển đổi đầu ra XML và kết hợp các điều kiện logic vào các truy vấn. Bài viết này hướng dẫn cho bạn hỗ trợ XQuery của DB2, giải thích vài khái niệm ngôn ngữ cơ bản và chỉ ra bạn có thể viết và thực hiện các câu truy vấn XQuery đơn giản đối với dữ liệu XML đã lưu trữ trên DB2 như thế nào. Đây là bài viết thứ bẩy trong loạt bẩy bài viết giúp bạn chuẩn bị cho bài thi 730 cơ bản về DB2 9. Trước khi bạn bắt đầu Để giúp bạn chuẩn bị cho các bài thi lấy chứng chỉ DB2, bài viết này giới thiệu cho bạn về XQuery và những hỗ trợ của nó trong DB2. Bạn nên làm quen với DB2 9 và hỗ trợ pureXML của nó trước khi đọc bài viết này. Bài viết này tập trung vào việc sử dụng XQuery để truy vấn dữ liệu DB2 XML. Bài viết đưa ra một thảo luận hạn chế về việc sử dụng SQL/XML (SQL với những mở rộng XML) để truy vấn dữ liệu DB2 XML. Để tìm hiểu kỹ hơn về những hỗ trợ của DB2 cho các hàm SQL/XML theo chuẩn kỹ nghệ, xem Tài nguyên. Về loạt bài viết này Bạn đang muốn thi lấy chứng chỉ cơ bản về DB2 (Bài thi 730)? Nếu đúng, bạn đã tìm đúng nơi để học rồi đấy. Loạt bài này nằm trong loạt bẩy bài viết chuẩn bị thi chứng chỉ DB2 bao hàm tất cả kiến thức cơ bản các chủ đề bạn cần nắm được trước khi đọc câu hỏi thi đầu tiên. Thậm chí, nếu bạn không có ý định thi lấy chứng chỉ ngay bây giờ, thì tập hợp bài viết này vẫn sẽ là một kho tài nguyên hữu ích để bắt đầu học và tìm hiểu xem có những gì mới trong DB2 9. Về bài viết này Bài viết này khảo sát các khả năng cơ bản hỗ trợ XQuery mới của DB2. Ngoài ra, bài viết cũng phân tích những khác biệt chính giữa XQuery và SQL, khảo sát XPath và biểu thức "FLWOR", và hướng dẫn bạn cách để viết các XQuery đơn giản trên dữ liệu XML. Bài viết này hướng tới những người sử dụng DB2 có ý định làm việc với tài liệu XML được lưu trữ trong các cấu trúc phân cấp dưới dạng các cột của các bảng DB2. Tài liệu trong bài viết này bao trùm các chủ đề đã được đề cập tới trong phần 1, 4 và 5 của bài thi. Bạn có thể tìm hiểu về các mục tiêu này tại: http://www- 03.ibm.com/certify/tests/obj730.shtml. Bạn nên làm quen với các kỹ nghệ XML cơ bản và hỗ trợ pureXML mới của DB2 trước khi đọc bài viết này. Nếu cần thiết, bạn có thể xem thêm Tài nguyên để có những hiểu biết cơ bản về vấn đề này. Các mục tiêu Sau khi hoàn thành bài học này, bạn có thể: Hiểu được những khái niệm XQuery cơ bản Viết những câu XQuery đơn giản sử dụng một vài biểu thức điển hình Các điều kiện tiên quyết Bài viết này dành cho những người đã từng làm quen với công nghệ XML cơ bản và khả năng hỗ trợ mới của DB2 để quản lý dữ liệu và lưu trữ pureXML. Bạn cần có hiểu biết cơ bản về tính chất phân cấp của các tài liệu XML, khái niệm định dạng đúng (well-formedness), và cách sử dụng các phần tử, các thuộc tính như thế nào. Bạn cũng cần hiểu cách lưu trữ các tài liệu XML định dạng dúng đó trong cấu trúc phân cấp vốn có sử dụng DB2 9. Các yêu cầu hệ thống Bạn không nhất thiết phải có một bản sao của DB2 để hoàn thành bài học này, nhưng để chạy được các ví dụ bạn cần một hệ thống có cài đặt DB2 9. Các ví dụ có thể chạy trên mọi nền tảng, nhưng có một vài ví dụ chỉ có thể chạy được trên nền Windows. Bạn sẽ lĩnh hội được nhiều kiến thức hơn nếu bạn tải về phiên bản dùng thử miễn phí của IBM DB2 9 để làm việc với bài viết này. Tổng quan về XQuery DB2 9 có khả năng hỗ trợ XQuery, một ngôn ngữ truy vấn mới được thiết kế chuyên dụng khi thao tác với dữ liệu XML. Là một phần của chuẩn kỹ nghệ W3C, XQuery cho phép người dùng duyệt cấu trúc phân cấp trong tài liệu XML. Kết quả là, bạn có thể truy vấn các tài liệu XML hoặc các phân đoạn tài liệu sử dụng XQuery. Bạn cũng có thể viết các câu XQuery có chứa các vị từ dựa trên XML để lọc ra dữ liệu không mong muốn từ những kết quả mà DB2 sẽ trả về. XQuery hỗ trợ nhiều khả năng như khả năng biến đổi đầu ra XML và kết hợp logic điều kiện vào các truy vấn. Trước khi học cách sử dụng XQuery như thế nào, bạn cần hiểu vài khái niệm cơ bản về ngôn ngữ. Cơ bản về XQuery Một XQuery luôn biến đổi từ một giá trị của mô hình dữ liệu XQuery này (XQuery Data Model) sang một giá trị của một mô hình dữ liệu XQuery khác. Một giá trị trong mô hình dữ liệu XQuery là một chuỗi gồm không hoặc nhiều hơn một danh mục (item). Một danh mục có thể là: Giá trị nguyên tử bất kì Một nút XML như phần tử (element), thuộc tính (attribute) hoặc nút văn bản (text node) (đôi khi được gọi là một phân đoạn tài liệu XML) Một tài liệu XML đầy đủ Thường thì đầu vào một XQuery là một tập hợp các tài liệu XML. Ví dụ 1 biểu diễn một tài liệu XML có chứa 8 nút phần tử, một nút thuộc tính và sáu nút văn bản. Các nút phần tử được biểu diễn bằng các thẻ phần tử. Các phần tử Client, Address, street, city, state, zip và hai phần tử email được gọi là các nút phần tử trong tài liệu này. Nếu để ý kỹ phần tử Client, bạn sẽ thấy rằng nó chứa một nút thuộc tính là id của Client đó. Một số nút phần tử của tài liệu có các nút văn bản đi kèm. Ví dụ, nút văn bản cho phần tử city là San Jose. Ví dụ 1. Một tài liệu XML mẫu <Client id="123"> <Address> <street>9999 Elm St.</street> <city>San Jose</city> <state>CA</state> <zip>95141</zip> </Address> <email>anyemail@yahoo.com</email> <email>anotheremail@yahoo.com</email> </Client> Hình 1 chỉ ra các nút của tài liệu mẫu này. Hình 1. Phần tử, thuộc tính, và các nút văn bản trong một tài liệu XML mẫu Ngôn ngữ XQuery suy ra từ các chuẩn khác của XML, chẳng hạn như XPath. Nó xác định những người dùng có thể duyệt qua một tài liệu XML và lược đồ XML như thế nào, nó chỉ rõ các kiểu dữ liệu và các cấu trúc hợp lệ cho các tài liệu của họ. Bạn sẽ học cách kết hợp các biểu thức XPath vào các XQuery trong bài viết này. XQuery cung cấp các loại biểu thức khác nhau mà bạn có thể kết hợp với nhau theo cách mà bạn muốn. Mỗi biểu thức trả về một chuỗi các giá trị mà chúng được dùng như là đầu vào cho các biểu thức khác. Kết quả của biểu thức ngoài cùng là kết quả của truy vấn. Bài viết này thảo luận hai loại biểu thức XQuery quan trọng. Biểu thức đường dẫn Cho phép người dùng trình duyệt hoặc "khám phá" cấu trúc phân cấp của một tài liệu XML và trả về các nút được tìm thấy khi kết thúc đường dẫn. Biểu thức FLWOR Rất giống với biểu thức SELECT-FROM-WHERE trong SQL. Nó được dùng để thực hiện phép lặp trên một chuỗi các danh mục và trả về một vài kết quả nào đó được tính toán từ mỗi danh mục. XQuery khác với SQL như thế nào Nhiều người dùng SQL nhận thức sai lầm rằng XQuery rất giống với SQL. Tuy nhiên, XQuery khác SQL ở rất nhiều điểm lớn bởi vì ngôn ngữ này được thiết kế để thao tác với các mô hình dữ liệu có nhiều đặc trưng khác biệt. Các tài liệu XML có cấu trúc phân cấp và có tính chất thứ bậc. Ngược lại, các bảng biểu được hỗ trợ trong hệ quản trị cơ sở dữ liệu (DBMS) quan hệ (nói chính xác hơn là DBMS dựa trên SQL) là cấu trúc phẳng và dựa trên tập hợp, do đó các bản ghi là không có thứ tự. Những sự khác biệt này trong các mô hình dữ liệu dẫn tới sự khác biệt quan trọng trong các ngôn ngữ truy vấn được thiết kế để hỗ trợ mô hình đó. Ví dụ, XQuery cho phép người lập trình duyệt trên cấu trúc phân cấp của tài liệu XML. SQL phẳng (không có các mở rộng XML) không có hoặc không cần thiết các biểu thức tương ứng để duyệt trên cấu trúc dữ liệu bảng biểu như vậy. XQuery hỗ trợ cả hai loại dữ liệu có kiểu và không có kiểu, trong khi dữ liệu SQL luôn luôn phải được định kiểu rõ ràng. Đây chỉ là một vài sự khác biệt giữa XQuery và SQL. Việc cung cấp một danh sách đầy đủ những sự khác biệt giữa hai ngôn ngữ nằm ngoài phạm vi của bài viết có tính chất giới thiệu này, nhưng phần Tài nguyên sẽ cung cấp thêm thông tin về chủ đề này. XQuery không có giá trị null bởi vì các tài liệu XML bỏ qua dữ liệu thiếu hoặc dữ liệu không biết. SQL lại sử dụng giá trị null để biểu diễn những dữ liệu dạng đó. XQuery trả về một chuỗi dữ liệu XML; trong khi SQL trả về kết quả là các tập hợp các kiểu dữ liệu SQL khác nhau. Điểm cuối cùng đó là, XQuery hoạt động trên các kiểu XML trong khi SQL hoạt động trên các cột được định kiểu SQL truyền thống, và SQL/XML (SQL có các mở rộng XML) hoạt động trên cả dữ liệu XML và các kiểu dữ liệu SQL truyền thống. Các biểu thức đường dẫn trong XQuery XQuery hỗ trợ các biểu thức XPath cho phép người dùng trình duyệt một cấu trúc phân cấp tài liệu XML để xác định vị trí của các phần quan trọng. Phần thảo luận về XPath một cách chi tiết nằm ngoài phạm vi của bài viết này nhưng chúng ta sẽ xem xét một vài ví dụ đơn giản ở đây. Các biểu thức XPath rất giống với các biểu thức mà bạn sử dụng khi làm việc với một hệ thống tệp máy tính truyền thống. Hãy xem cách trình duyệt các thư mục Unix và Windows, bạn sẽ có một ý tưởng về cách bạn trình duyệt một tài liệu XML sử dụng XPath. Một biểu thức đường dẫn trong XQuery có chứa một loạt các bước được ngăn cách bằng các kí tự gạch chéo. Trong cấu trúc đơn giản nhất của nó, mỗi bước duyệt xuống trên cấu trúc phân cấp XML tìm ra các phần tử con của nó được trả về từ bước trước. Mỗi bước trong biểu thức đường dẫn cũng có thể chứa một vị từ để lọc ra các phần tử được trả về ở bước đó, chỉ giữ lại các phần tử thỏa điều kiện. Bạn sẽ xem một ví dụ của trường hợp đó ngay bây giờ. Một nhiệm vụ phổ biến liên quan đến việc duyệt từ gốc tài liệu XML (mức đỉnh của cây phân cấp XML) đến một nút quan tâm. Ví dụ, để lấy các phần tử email trong tài liệu trình bày trong ví dụ 2 dưới đây, bạn có thể viết: Ví dụ 2. Duyệt các phần tử email /Client/email Nếu tài liệu chứa nhiều phần tử email và bạn chỉ muốn lấy phần tử đầu tiên, bạn có thể viết: Ví dụ 3. Duyệt phần tử email đầu tiên /Client/email[1] Ngoài việc xác định các nút phần tử trong các biểu thức đường dẫn, bạn có thể xác định các nút thuộc tính sử dụng kí hiệu @ để phân biệt thuộc tính với phần tử. Biểu thức đường dẫn này duyệt phần tử email đầu tiên với điều kiện phần tử Client có chứa thuộc tính id là 123: Ví dụ 4. Xác định một nút thuộc tính và giá trị /Client[@id='123']/email[1] Ví dụ trước kết hợp một vị từ lọc dựa trên một giá trị thuộc tính. Bạn cũng có thể lọc trên các giá trị nút khác. Những người dùng XPath cũng khá thường xuyên lọc trên các giá trị phần tử như trong ví dụ 5, nó trả về phần tử mã bưu điện (zip) với mọi Client sống ở California: Ví dụ 5. Lọc trên một giá trị phần tử /Client/Address[state="CA"]/zip Bạn cũng có thể dùng dấu sao ("*") để tham chiếu nút bất kì ở từng bước riêng của biểu thức đường dẫn. Ví dụ sau trả về phần tử city bất kì tìm thấy dưới nút con gần nhất bất kì của phần tử Client. Ví dụ 6. Sử dụng dấu sao (*) [...]... thu được Ví dụ này cho các kết quả được trả về theo thứ tự giảm dần: for $i in (5, 1, 2, 3) order by $i descending return $i 5 3 2 1 DB2 hỗ trợ cho XQuery DB2 xử lý XQuery dưới dạng một lớp ngôn ngữ thứ nhất, cho phép người dùng viết trực tiếp các biểu thức XQuery hơn là yêu cầu người dùng nhúng hoặc gói các câu XQuery vào các câu lệnh SQL Máy truy vấn của DB2 xử lý các truy vấn XQuery một cách tự... pháp, đánh giá và tối ưu các câu XQuery mà không dịch chúng sang SQL Nếu muốn, bạn có thể viết các câu truy vấn "song ngữ" có chứa cả biểu thức XQuery và SQL DB2 cũng xử lý và tối ưu tốt các truy vấn này Để thực hiện trực tiếp một truy vấn XQuery trong DB2, bạn phải viết phần mở đầu cho truy vấn bằng từ khóa xquery Điều này chỉ cho DB2 gọi ra bộ phân tích cú pháp XQuery của nó để xử lý yêu cầu của... hàm có tên db2- fn:xmlcolumn Hàm này đưa một tham số đầu vào để xác định bảng DB2 và các tên cột XML quan tâm Hàm db2- fn:xmlcolumn trả về một dãy các tài liệu XML đã lưu trữ trong cột cho trước Ví dụ, truy vấn sau trả về một chuỗi các tài liệu XML chứa thông tin liên hệ (contactinfo) của khách hàng: Ví dụ 12 Câu XQuery đơn giản trả về thông tin liên hệ (contactinfo) của khách hàng xquery db2fn:xmlcolumn('CLIENTS.CONTACTINFO')... vài tài liệu XML Các đoạn tiếp theo giải thích chi tiết hơn về bảng này và nội dung của nó, mô tả những tiện ích mà DB2 cung cấp để bạn có thể sử dụng viết các câu XQuery Nếu bạn muốn cài đặt hệ thống DB2 của mình có chứa các nội dung và bảng mẫu thì một kịch bản sẵn có là tutorial.sql Nó chứa tất cả các mã trình bày trong phần này Bảng mẫu Bảng "clients" trong các ví dụ của chúng ta có chứa các cột... dụng XQuery như là một ngôn ngữ ngoài cùng (hoặc mức đỉnh) Nếu bạn nhúng các biểu thức XQuery vào SQL, bạn không cần viết phần mở đầu của truy vấn bằng từ khóa xquery Trong bài viết này, bạn sẽ sử dụng XQuery như là một ngôn ngữ chính vì vậy tất cả các truy vấn được trình bày ở đây sẽ được viết với phần mở đầu bằng xquery Môi trường cơ sở dữ liệu mẫu Để giúp bạn học XQuery, bài viết này đưa ra một bảng... (đưa ra từ một cửa sổ lệnh DB2) sẽ bắt đầu chạy bộ xử lý lệnh DB2 để các kết quả XQuery sẽ được hiển thị trên định dạng dễ đọc: Ví dụ 11 Cài đặt các lựa chọn xử lý dòng lệnh DB2 db2 -i -d Lệnh này thêm vào các khoảng trắng trong các kết quả XQuery được hiển thị DB2 không thêm các khoảng trắng này vào dữ liệu của bạn Các ứng dụng của bạn không nhận thấy các danh mục được trả về với khoảng trắng đã thêm... XML đã cấu trúc Bảng "Clients" được định nghĩa như thế nào: Ví dụ 9 Định nghĩa bảng Clients create table clients( id int primary key not null, name varchar(50), status varchar(10), contactinfo xml ); Các tài liệu XML mẫu Trước khi khảo sát viết các câu XQuery như thế nào với bảng này, bạn cần đưa những dữ liệu mẫu vào nó Các câu lệnh SQL dược đây chèn sáu bản ghi vào bảng Clients Mỗi bản ghi chứa một... processor) hoặc bộ soạn thảo DB2 Command Editor của DB2 Control Center Các ví dụ trong bài viết này sử dụng bộ xử lý dòng lệnh DB2 (DB2 cũng gắn bộ Eclipse-dựa trên Developer Workbench có thể giúp bạn xây dựng các câu XQuery bằng biểu đồ, nhưng phần Developer Workbench nằm ngoài phạm vi của bài viết này.) Bạn có thể thay đổi các cài đặt mặc định với bộ xử lý dòng lệnh DB2 để làm việc với dữ liệu XML... viết XQuery, trong đó nó biểu diễn những trường hợp khác mà XQuery khác với SQL Ví dụ, nếu bạn kết hợp biểu thức đường dẫn "/client/address" vào câu XQuery của bạn, bạn không nhận được bất kì kết quả nào với tài liệu mẫu đã cho trong Ví dụ 1 Các biểu thức FLWOR trong XQuery Mọi người thường dùng các biểu thức FLWOR trong XQuery Giống như khối SELECT-FROM-WHERE trong SQL, một biểu thức FLWOR của XQuery. .. hiện tương đối khác nhau trong XQuery Một ví dụ giúp cho việc phân biệt rõ ràng hơn Xem biểu thức sau, nó sử dụng từ khóa for và chú ý tới đầu ra được trả về: for $i in (1, 2, 3) return {$i} 1 2 3 Dòng cuối cùng của biểu thức đưa ra một phần tử mới có tên output được trả về cho mỗi lần lặp Giá trị của phần tử này là giá trị của $i . Chuẩn bị cho kỳ thi 730 cơ bản về DB2 9, Phần 7: Giới thi u về XQuery C. M. Saracco, Kỹ sư phần mềm, IBM 硅谷实验室 Tóm tắt: Các đặc tính DB2 9 hỗ trợ cho XQuery, một ngôn ngữ chuẩn công. bạn bắt đầu Để giúp bạn chuẩn bị cho các bài thi lấy chứng chỉ DB2, bài viết này giới thi u cho bạn về XQuery và những hỗ trợ của nó trong DB2. Bạn nên làm quen với DB2 9 và hỗ trợ pureXML. các câu truy vấn XQuery đơn giản đối với dữ liệu XML đã lưu trữ trên DB2 như thế nào. Đây là bài viết thứ bẩy trong loạt bẩy bài viết giúp bạn chuẩn bị cho bài thi 730 cơ bản về DB2 9. Trước