1. Trang chủ
  2. » Công Nghệ Thông Tin

Chuẩn bị cho kỳ thi 730 cơ bản về DB2 9, Phần 7: Giới thiệu về XQuery potx

68 384 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Giới thiệu về XQuery
Tác giả C. M. Saracco
Trường học Trường Đại Học IBM
Chuyên ngành Cơ sở dữ liệu và XML
Thể loại Bài viết
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 68
Dung lượng 1,2 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

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

Trang 2

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: 03.ibm.com/certify/tests/obj730.shtml Bạn nên làm quen với các kỹ nghệ XML

http://www-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

Trang 3

 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

Tổng quan về XQuery

Trang 4

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

Trang 5

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

Trang 6

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

Trang 7

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

Trang 8

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ừ

Trang 9

để 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:

Trang 10

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

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 (*)

Trang 11

Ví dụ 8 biểu diễn vài ví dụ về các kiểu khác nhau của các biểu thức đường dẫn

Ví dụ 8 Các biểu thức đường dẫn và nghĩa của chúng

//* (Retrieves all nodes in the document)

//email (Finds email elements anywhere in the document)

Trang 12

/Client/email[1]/text() (Retrieves the text node of the first email element

beneath the Client element)

/Client/Address/* (Selects all child nodes of the Address sub-element of

root Client element)

/Client/data(@id) (Returns the value of the id attribute of the Client

Chú ý rằng XPath là cấu trúc động Bạn ghi nhớ điều quan trọng này khi viết

XQuery, trong đó nó biểu diễn những trường hợp khác mà XQuery khác với SQL

Trang 13

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 có thể chứa nhiều mệnh đề được xác định bằng các từ khóa Các mệnh đề của một biểu thức FLWOR bắt đầu bằng các từ khóa dưới đây:

 for: Lặp trên một chuỗi đầu vào, liên kết lần lượt một biến với mỗi danh mục (item) đầ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 các mục

 where: Xác định điều kiện để lọc các kết quả truy vấn

 order by: Xác định trật tự sắp xếp kết quả

 return: Xác định kết quả được trả về

Hãy xem lại mỗi từ khóa một lúc Chúng ta sẽ thảo luận về mệnh đề for và return đồng thời, vì vậy bạn có thể quan sát một ví dụ đầy đủ (Không có mệnh đề return, biểu thức sẽ không đầy đủ.)

for và return

Trang 14

Các từ khóa for và return thường sử dụng lặp qua một chuỗi các giá trị và trả về kết quả nào đó cho mỗi giá trị Sau đây là một ví dụ rất đơn giản:

for $i in (1, 2, 3)

return $i

Trong XQuery, các tên biến được thêm một dấu ("$") đằng trước Vì vậy ví

dụ trên gán các giá trị 1, 2, 3 vào biến $i ở mỗi lần lặp, và trả về mỗi giá trị cho $i trong mỗi lần lặp đó Kết quả của biểu thức là một chuỗi ba giá trị:

Trang 15

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ề:

tử đầu ra, mỗi cái một giá trị khác nhau

Bây giờ hãy xem một biểu thức tương tự sử dụng từ khóa let:

let $i := (1, 2, 3)

Trang 16

return <output>{$i}</output>

<output>1 2 3</output>

Kết quả tương đối khác Nó chứa một phần tử đầu ra đơn với giá trị "1 2 3"

Hai ví dụ này minh họa điều quan trọng cần ghi nhớ là: từ khóa for lặp qua các mục trong một chuỗi đầu vào ở mỗi lần lặp thì gán cho chúng mỗi biến

cụ thể Ngược lại, từ khóa let gán tất cả các mục trong chuỗi đầu vào một lần một biến cụ thể

where

Trong XQuery, các hàm where rất giống với mệnh đề WHERE trong SQL:

nó cho phép bạn áp dụng các điều kiện lọc trên truy vấn của mình Xem ví

dụ sau đây:

for $i in (1, 2, 3)

where $i < 3

return <output>{$i}</output>

Trang 18

ưu tốt các truy vấn này

Trang 19

Để 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 bạn Bạn chỉ cần làm như vậy nếu bạn

sử 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 "clients" mẫu có chứa một 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ựa trên các kiểu dữ liệu SQL truyền thống (chẳng hạn như số nguyên và các xâu kí tự độ dài khác nhau), và một cột dựa trên kiểu dữ liệu SQL mới là "XML"

Ba cột đầu tiên ghi thông tin về các ID, tên (name) và trạng thái (status) của các khách hàng (Client) Các giá trị điển hình cho cột status bao gồm Gold, Silver, và Standard Cột thứ tư chứa mỗi thông tin liên lạc của khách hàng, chẳng hạn như

Trang 20

địa chỉ hộp thư nhà riêng (home mailing address), số điện thoại (phone numbers), địa chỉ email (email addresses), v.v Các thông tin như thế được lưu trữ trong các tài liệu 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 tài liệu XML và cấu trúc của mỗi tài liệu XML thay đổi đến một mức độ nào đó Ví dụ, các địa chỉ email cho những khách hàng sẵn có chứ không phải khách hàng khác

Trang 21

Ví dụ 10 Dữ liệu mẫu cho bảng các Client

Trang 27

Môi trường truy vấn

Tất cả các truy vấn trong bài viết này được thiết kế để có thể tương tác với nhau Bạn có thể làm điều đó qua bộ xử lý dòng lệnh của DB2 (DB2 command line 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 dễ dàng hơn Ví dụ, lệnh sau đây (đư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:

Trang 28

Các thao tác lấy dữ liệu XML đơn giản

Trong đoạn này, bạn sẽ học cách viết các câu XQuery để lấy về toàn bộ tài liệu XML và chỉ rõ các vị trí (hoặc các phân đoạn) của các tài liệu XML Để làm được như vậy, bạn dùng các biểu thức XPath và các biểu thức FLWOR

Lấy toàn bộ các tài liệu XML đã lưu trữ trong DB2

Khi chạy như một ngôn ngữ bậc cao, XQuery cần phải có một nguồn dữ liệu đầu vào Trong DB2, bạn có thể xác định nguồn dữ liệu đầu vào này bằng cách gọi 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

Trang 29

bạn xác định ngược lại, DB2 coi các tên bảng và cột vào trường hợp cao hơn ở danh mục bên trong nó Bởi vì XQuery là cấu trúc động, các tên bảng và cột ở trường hợp thấp hơn sẽ không phù hợp với các tên ở trường hợp cao hơn trong danh mục DB2

Bây giờ hãy xem đầu ra của câu XQuery này Cho dữ liệu mẫu đã được chèn vào bảng Clients, đầu ra của truy vấn trong Ví dụ 12 là một chuỗi gồm 6 tài liệu XML được trình bày dưới đây

Ví dụ 13 Kết quả của truy vấn trước

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

HÌNH ẢNH LIÊN QUAN

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 - Chuẩn bị cho kỳ thi 730 cơ bản về DB2 9, Phần 7: Giới thiệu về XQuery potx
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 (Trang 6)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm