Hãy khởi đầu nhanh chóng với DB2 9 pureXML, Phần 4: Truy vấn dữ liệu DB2 XML bằng XQuery docx

34 283 0
Hãy khởi đầu nhanh chóng với DB2 9 pureXML, Phần 4: Truy vấn dữ liệu DB2 XML bằng XQuery docx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Hãy khởi đầu nhanh chóng với DB2 9 pureXML, Phần 4: Truy vấn dữ liệu DB2 XML bằng XQuery Don Chamberlin, Tác giả chuyên nghiệp, IBM's Almaden Research Center Cynthia M. Saracco, Kiến trúc giải pháp cao cấp, IBM Tóm tắt: DB2® phiên bản V9 của IBM cho Linux®, UNIX® và Windows®(R) mô tả sự hỗ trợ mới quan trọng để lưu trữ, quản lý và tìm kiếm dữ liệu XML, gọi tắt là pureXML. Loạt bài này giúp bạn nhanh chóng nắm vững các tính năng XML mới này thông qua một số bài viết đi dần từng bước giải thích cách hoàn thành các nhiệm vụ cơ bản. Trong bài viết này, hãy tìm hiểu cách truy vấn dữ liệu được lưu trữ trong các cột XML bằng cách sử dụng XQuery. [25.03.2010: Được viết lần đầu vào năm 2006, bài viết này luôn được cập nhật để theo kịp với các thay đổi trong phiên bản 9.5 và 9.7 của DB2 Người hiệu đính.] Bạn đã có thể nghe thấy tin đồn về phiên bản V9 của DB2 hệ thống quản lý cơ sở dữ liệu đầu tiên của IBM có hỗ trợ cả hai cấu trúc dữ liệu (dựa vào-SQL) dạng bảng và cấu trúc dữ liệu (dựa vào-XML) phân cấp. Các bài viết trước của loạt bài này đã tóm tắt các tính năng XML mới của DB2, đã mô tả cách tạo các đối tượng cơ sở dữ liệu và điền chúng với dữ liệu XML và giải thích cách làm việc với dữ liệu XML bằng cách sử dụng SQL và SQL/XML. Bài viết này tiếp tục tìm hiểu các khả năng của XML của DB2 bằng cách tập trung vào sự hỗ trợ mới của nó cho XQuery. DB2 xử lý XQuery như một ngôn ngữ lớp đầu tiên, cho phép những người dùng viết các biểu thức XQuery trực tiếp chứ không yêu cầu những người dùng đó nhúng hoặc bao bọc các XQuery trong các câu lệnh SQL. Hơn nữa, máy truy vấn của DB2 xử lý các XQuery theo cách tự nhiên, nghĩa là nó phân tích cú pháp, đánh giá và tối ưu hóa các XQuery mà không bao giờ chuyển dịch chúng thành SQL sau hậu trường. Tất nhiên, nếu bạn chọn viết các truy vấn song ngữ bao gồm cả các biểu thức XQuery lẫn SQL, thì DB2 cũng sẽ xử lý và tối ưu hóa các truy vấn này. Như với SQL/XML trong Phần 3 của loạt bài này, bài viết này tìm hiểu một số nhiệm vụ truy vấn chung và xem xét cách bạn có thể sử dụng XQuery để hoàn thành các mục tiêu của mình. Đầu tiên, hãy xem xét nhanh XQuery khác với SQL như thế nào. Giới thiệu về XQuery XQuery khác với SQL ở một số khía cạnh chính, phần lớn là do các ngôn ngữ được thiết kế để làm việc với các mô hình dữ liệu khác nhau có các đặc điểm khác nhau. Các tài liệu XML chứa các hệ thống phân cấp và sở hữu một trật tự vốn có. 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 vào thiết lập. Như vậy, các hàng không có thứ tự. Những khác biệt giữa các mô hình dữ liệu này sinh ra một số các khác biệt cơ bản trong các ngôn ngữ truy vấn riêng của chúng, bao gồm:  XQuery hỗ trợ các biểu thức đường dẫn để cho phép các lập trình viên chuyển hướng thông qua cấu trúc phân cấp của XML, trong khi SQL thuần (không có các phần mở rộng XML) thì không.  XQuery hỗ trợ cả hai dữ liệu được định kiểu và không được định kiểu, trong khi dữ liệu SQL luôn luôn được định nghĩa với một kiểu cụ thể.  XQuery thiếu các giá trị bằng không (null) vì các tài liệu XML bỏ qua dữ liệu còn thiếu hoặc chưa rõ. Tất nhiên, SQL sử dụng các giá trị bằng không để biểu diễn các giá trị dữ liệu còn thiếu hoặc chưa rõ.  XQuery trả về các chuỗi dữ liệu XML, trong khi SQL trả về các tập kết quả của các kiểu dữ liệu SQL khác nhau. Đây là một tập hợp con về những khác biệt cơ bản giữa XQuery và SQL. Việc cung cấp một danh sách đầy đủ nằm ngoài phạm vi của bài viết giới thiệu này, nhưng một bài viết của Tạp chí Các hệ thống IBM đã bàn luận về các khác biệt ngôn ngữ cụ thể hơn. Bài viết này tập trung vào một số khía cạnh cơ bản của ngôn ngữ XQuery và cách bạn có thể sử dụng nó để truy vấn dữ liệu XML trong DB2 V9. Cơ sở dữ liệu mẫu Các truy vấn trong bài viết này truy cập các bảng mẫu được tạo ra trong Phần 1 của loạt bài này. Để xem lại nhanh, Liệt kê 1 định nghĩa các bảng items (các mặt hàng) và clients (các khách hàng) mẫu. Liệt kê 1. Các định nghĩa bảng create table items ( id int primary key not null, brandname varchar(30), itemname varchar(30), sku int, srp decimal(7,2), comments xml ) create table clients( id int primary key not null, name varchar(50), status varchar(10), contactinfo xml ) Dữ liệu XML mẫu có trong cột items.comments được hiển thị trong Liệt kê 2, trong khi mẫu dữ liệu XML có trong cột clients.contactinfo được hiển thị trong Liệt kê 3. Các ví dụ truy vấn tiếp theo sẽ tham chiếu các phần tử cụ thể trong một hoặc cả hai tài liệu XML này. Liệt kê 2. Tài liệu mẫu XML được lưu trữ trong cột Comments của bảng Items <Comments> <Comment> <CommentID>133</CommentID> <ProductID>3926</ProductID> <CustomerID>8877</CustomerID> <Message>Heels on shoes wear out too quickly.</Message> <ResponseRequested>No</ResponseRequested> </Comment> <Comment> <CommentID>514</CommentID> <ProductID>3926</ProductID> <CustomerID>3227</CustomerID> <Message>Where can I find a supplier in San Jose?</Message> <ResponseRequested>Yes</ResponseRequested> </Comment> </Comments> Liệt kê 3. Tài liệu mẫu XML được lưu trữ trong cột Contactinfo của bảng Clients <Client> <Address> <street>5401 Julio Ave.</street> <city>San Jose</city> <state>CA</state> <zip>95116</zip> </Address> <phone> <work>4084630000</work> <home>4081111111</home> <cell>4082222222</cell> </phone> <fax>4087776666</fax> <email>love2shop@yahoo.com</email> </Client> Môi trường truy vấn Thiết kế tất cả các truy vấn trong bài viết này được ban hành tương tác với nhau. Bạn có thể làm điều này thông qua bộ xử lý dòng lệnh DB2 hoặc Trình soạn thảo lệnh của DB2 (DB2 Command Editor) của Trung tâm điều khiển DB2 (DB2 Control Center). Các ảnh màn hình và các tập lệnh trong bài viết này tập trung vào cái sau. (IBM Data Studio và IBM Optim Development Studio cũng đi kèm với một bàn làm việc của nhà phát triển dựa trên Eclipse có thể giúp các lập trình viên xây dựng các truy vấn bằng đồ họa. Tuy nhiên, bài viết này không bàn về các vấn đề phát triển ứng dụng hoặc Development Studio). Để sử dụng DB2 Command Editor, hãy khởi chạy Control Center và chọn Tools > Command Editor. Một cửa sổ tương tự như Hình 1 sẽ xuất hiện. Hình 1. DB2 Command Editor, có thể được khởi chạy từ DB2 Control Center Gõ các truy vấn của bạn vào ô bên trên, nhấn vào mũi tên màu xanh lá cây ở góc trên bên trái để chạy chúng và xem kết quả của bạn ở ô bên dưới hoặc trong thẻ Query results (Các kết quả truy vấn) riêng. Các ví dụ XQuery Cũng như trong Phần 3 của loạt bài này, bài viết này đi dần từng bước qua một số các kịch bản nghiệp vụ chung và cho thấy cách sử dụng XQuery để đáp ứng các yêu cầu về dữ liệu XML. Nó cũng tìm hiểu nhiều tình huống phức tạp có liên quan đến việc nhúng SQL trong XQuery. XQuery cung cấp nhiều loại biểu thức khác nhau, có thể được kết hợp theo bất kỳ cách nào mà bạn muốn. Mỗi biểu thức trả về một danh sách các giá trị, có thể được sử dụng làm đầ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 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. Một biểu thức FLWOR tựa như một biểu thức SELECT-FROM-WHERE trong SQL: nó được dùng để lặp lại qua một danh sách các mặt hàng và để trả về theo tùy chọn cái gì đó được tính toán từ mỗi mặt hàng. Mặt khác, một biểu thức đường dẫn chuyển hướng qua một hệ thống phân cấp các phần tử XML và trả về các phần tử được tìm thấy ở cuối đường dẫn. Giống như một biểu thức SELECT-FROM-WHERE trong SQL, một biểu thức XQuery FLWOR có thể chứa một số mệnh đề bắt đầu bằng các từ khoá cụ thể. Các từ khoá sau đây được sử dụng để bắt đầu các mệnh đề trong một biểu thức FLWOR:  for: Lặp lại qua một chuỗi đầu vào, kết hợp một biến với lần lượt từng mặt hàng đầu vào.  let: Khai báo một biến và gán cho nó một giá trị, có thể là một danh sách chứa nhiều mặt hàng.  where: Quy định các tiêu chuẩn để lọc các kết quả truy vấn.  order by: Quy định thứ tự sắp xếp của kết quả.  return: Định nghĩa 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, được phân cách bằng các ký tự gạch chéo. Theo dạng đơn giản nhất, mỗi bước chuyển hướng đi xuống trong một hệ thống phân cấp XML để tìm phần tử con của các phần tử được bước trước đó trả về. Mỗi bước trong một biểu thức đường dẫn cũng có thể chứa một biến vị ngữ lọc các phần tử được bước đó trả về, chỉ giữ lại các phần tử đáp ứng một số điều kiện. Ví dụ, giả sử rằng biến $clients liên kết với một danh sách các tài liệu XML có chứa các phần tử <Client>, biểu thức đường dẫn bốn bước $clients/Client/Address[state = "CA"]/zip sẽ trả về danh sách các mã vùng bưu điện cho các khách hàng có địa chỉ ở California. Trong nhiều trường hợp, có thể viết một câu truy vấn bằng cách sử dụng hoặc một biểu thức FLWOR hoặc một biểu thức một đường dẫn. Sử dụng XQuery của DB2 như một ngôn ngữ truy vấn cao cấp Để thực hiện trực tiếp một XQuery trong DB2 V9 (trái với việc nhúng nó vào một câu lệnh SQL), bạn phải bắt đầu truy vấn bằng từ khóa xquery. Từ khóa này ra lệnh cho DB2 gọi trình phân tích cú pháp XQuery của nó để xử lý yêu cầu của bạn. Lưu ý rằng bạn chỉ cần làm điều này khi bạn đang sử dụng XQuery như ngôn ngữ ngoài cùng (hoặc mức cao nhất). Nếu bạn đã nhúng biểu thức XQuery trong SQL, bạn không cần bắt đầu với từ khóa xquery. Tuy nhiên, bài viết này sử dụng XQuery như là ngôn ngữ chính, vì vậy tất cả các truy vấn đều được bắt đầu bằng xquery. Khi chạy như một ngôn ngữ mức cao, XQuery cần phải có một nguồn dữ liệu đầu vào. Một cách để một XQuery có thể nhận được dữ liệu đầu vào là gọi một hàm tên là db2-fn:xmlcolumn với một tham số, nhận biết tên bảng và tên cột của một cột XML trong một bảng DB2. Hàm db2-fn:xmlcolumn trả về chuỗi các tài liệu XML, được lưu trữ trong cột cụ thể. Ví dụ, truy vấn sau đây trong Liệt kê 4 trả về một chuỗi các tài liệu XML có chứa thông tin liên hệ của khách hàng. [...]... SQL truy n thống lẫn các giá trị phần tử XML cụ thể Để thay thế cho hàm db2- fn:xmlcolumn, trả về tất cả dữ liệu XML trong một cột của một bảng, bạn có thể gọi hàm db2- fn:sqlquery, thực hiện một truy vấn SQL và chỉ trả về dữ liệu đã chọn Truy vấn SQL đã chuyển sang db2- fn:sqlquery phải trả về dữ liệu XML Sau đó dữ liệu XML này có thể được XQuery xử lý thêm nữa Truy vấn trong Liệt kê 24 lấy thông tin... hàng xquery for $y in db2- fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/fax return $y/text() (hay) xquery db2- fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/fax/text() Kết quả của các truy vấn này sẽ tương tự như kết quả trong Liệt kê 9 Liệt kê 9 Kết quả đầu ra mẫu từ các truy vấn trước đây 4081112222 55 599 98888 Các kết quả của các truy vấn mẫu tương đối đơn giản vì phần tử fax được dựa trên một kiểu dữ liệu. .. dụng XQuery để lấy tất cả hoặc một phần tài liệu XML đã lưu của bạn và chuyển đổi kết quả đầu ra thành HTML cho dễ hiển thị trong một trình duyệt Web Truy vấn trong Liệt kê 17 lấy các địa chỉ của các khách hàng, sắp xếp các kết quả theo mã vùng bưu điện và chuyển đổi kết quả đầu ra thành các phần tử XML, là một phần của một danh sách HTML không theo thứ tự Liệt kê 17 Truy vấn dữ liệu XML của DB2 và... phần tử XML, như trong Liệt kê 6 Liệt kê 6 Kết quả đầu ra mẫu cho truy vấn trước đó 4081112222 55 599 98888 Một nhận xét ngẫu nhiên là, kết quả đầu ra cũng sẽ có một số thông tin không phải là mối quan tâm lớn trong bài viết này: phiên bản và dữ liệu mã hóa XML, chẳng hạn như < ?xml version="1.0" encoding="windows-1252" ?>, và thông tin về không gian tên XML, chẳng hạn như ... Bây giờ, bạn đã thấy cách viết XQueries lấy ra các đoạn tài liệu XML, tạo các dạng kết quả đầu ra XML mới và trả về kết quả đầu ra khác nhau dựa trên các điều kiện đã quy định trong chính các truy vấn đó Tóm lại, bạn đã tìm hiểu một vài cách sử dụng XQuery để truy vấn dữ liệu XML được lưu trong DB2 Để chắc chắn, có nhiều cách để tìm hiểu về XQuery hơn cách mà bài viết ngắn gọn này trình bày Nhưng có... trị phần tử XML với một biểu thức FLWOR xquery for $y in db2- fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client where $y/Address/zip="10011" or $y/Address/city="San Jose" return $y/email Lưu ý rằng mệnh đề for được thay đổi để nó liên kết với biến $y với các phần tử Client chứ không phải với các phần tử Address Mệnh đề này cho phép bạn lọc các phần tử Client bằng một phần của cây con (Địa chỉ) và trả về một phần. .. SQL trong XQuery Làm như vậy có thể có ích nếu bạn cần viết các truy vấn lọc dữ liệu dựa trên các giá trị cột XML và không XML Bạn có thể nhớ lại trong Phần 3 của loạt bài này về cách nhúng các biểu thức XQuery đơn giản trong một câu lệnh SQL để thực hiện nhiệm vụ này Ở đây, hãy xem xét cách làm ngược lại: SQL được nhúng trong XQuery để hạn chế các kết quả dựa trên cả các giá trị dữ liệu SQL truy n thống... FLWOR để lấy ra dữ liệu fax của khách hàng xquery for $y in db2- fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/fax return $y Dòng đầu tiên chỉ thị cho DB2 gọi trình phân tích cú phápXQuery của nó Dòng tiếp theo chỉ thị cho DB2 lặp lại qua các phần tử con fax của các phần tử Client đã chứa trong cột CLIENTS.CONTACTINFO Mỗi phần tử fax lần lượt được liên kết với biến $y Dòng thứ ba cho biết, với mỗi lần lặp... return $y/email[1] Truy vấn này khiến DB2 trả về phần tử e-mail đầu tiên mà nó tìm thấy trong mỗi tài liệu XML có đủ điều kiện (bản ghi liên hệ khách hàng) Nếu nó không tìm thấy một địa chỉ e-mail cho một khách hàng có đủ điều kiện, nó sẽ không trả về bất kỳ điều gì cho khách hàng đó Chuyển đổi kết quả đầu ra XML Một khía cạnh mạnh mẽ của XQuery là khả năng biến đổi đầu ra XML từ một dạng XML sang một dạng...Liệt kê 4 XQuery đơn giản để trả về dữ liệu liên hệ của khách hàng xquery db2- fn:xmlcolumn('CLIENTS.CONTACTINFO') Như bạn có thể nhớ lại trong lược đồ cơ sở dữ liệu của chúng ta (xem phần "Cơ sở dữ liệu mẫu"), các tài liệu XML được lưu trữ trong cột Contactinfo của bảng Clients Lưu ý rằng ở đây các tên cột và bảng được . Hãy khởi đầu nhanh chóng với DB2 9 pureXML, Phần 4: Truy vấn dữ liệu DB2 XML bằng XQuery Don Chamberlin, Tác giả chuyên nghiệp, IBM's. các tính năng XML mới của DB2, đã mô tả cách tạo các đối tượng cơ sở dữ liệu và điền chúng với dữ liệu XML và giải thích cách làm việc với dữ liệu XML bằng cách sử dụng SQL và SQL /XML. Bài viết. ngôn ngữ XQuery và cách bạn có thể sử dụng nó để truy vấn dữ liệu XML trong DB2 V9. Cơ sở dữ liệu mẫu Các truy vấn trong bài viết này truy cập các bảng mẫu được tạo ra trong Phần 1 của

Ngày đăng: 07/08/2014, 09:23

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan