Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
217,68 KB
Nội dung
Chuyển đổiXMLthành
dữ liệuquan hệ
Trong hướng dẫn này chúng tôi sẽ giới thiệu cho các bạn một số phương pháp
chuyển đổi các tài liệuXMLthành các hàng trong các bảng quan hệ, công việc vẫn
được biết đến như việc băm nhỏ hay phân tách các tài liệu XML.
Phương pháp chuyểnđổi các tài liệuXMLthành các hàng trong các bảng dữliệuquan hệ
hay được biết đến như việc shred (băm nhỏ) hay decompose (phân tách) các tài liệu
XML. Một trong những lý do chính cho việc shred là các ứng dụng SQL đang tồn tại vẫn
cần truy cập vào dữliệu dưới định dạng quanhệ. Cho ví dụ, các ứng dụng kế thừa, các
ứng dụng doanh nghiệp được đóng gói hoặc phần mềm báo cáo không phải lúc nào cũng
làm việc với XML. Chính vì vậy đôi khi bạn sẽ thấy khá hữu dụng trong việc băm nhỏ
(shred) tất cả hoặc một số giá trị dữliệu của một tài liệuXML được chỉ định vào các cột
và các hàng nằm trong các bảng dữliệuquanhệ.
Hướng dẫn này chúng tôi sẽ giới thiệu cho các bạn về:
Những ưu điểm và nhược điểm của việc băm nhỏ và các phương pháp băm nhỏ
khác.
Cách băm nhỏ dữliệuXMLthành các bảng quan hệ bằng lệnh INSERT có chứa
hàm XMLTABLE.
Cách sử dụng các chú thích XML Schema để bản đồ và băm nhỏ các tài liệuXML
thành các bảng quanhệ.
Ưu điểm và nhược điểm của việc băm nhỏ
Khái niệm của việc băm nhỏ được minh chứng trong hình 1. Trong ví dụ này, các tài liệu
XML có các thông tin về customer name, address, và phone được bản đồ hóa thành hai
bảng quanhệ. Các tài liệu có thể chứa nhiều thành phần phone vì mối quan hệ giữa khách
hàng và số điện thoại của họ là mối quan hệ 1-n. Do đó, các số điện thoại sẽ được băm
nhỏ vào một bảng riêng. Mỗi một thành phần lặp, chẳng hạn như phone, sẽ dẫn đến một
bảng bổ sung trong giản đồ mục tiêu quanhệ. Giả dụ các thông tin khách hàng có thể
chứa nhiều địa chỉ email, nhiều tài khoản, danh sách các đơn đặt hàng gần đây, nhiều sản
phẩm trong mỗi đơn hàng và các mục lặp lại khác. Khi đó số các bảng được yêu cầu
trong giản đồ mục tiêu quan hệ có thể tăng rất nhanh. Tuy nhiên việc băm nhỏ XML
thành một số lớn các bảng có thể dẫn đến sự phức tạp của các đối tượng logic doanh
nghiệp và làm cho sự phát triển ứng dụng trở nên khó khăn hay rất dễ gây lỗi. Việc truy
vấn dữliệu đã được băm nhỏ hoặc việc lắp ráp lại (reassembling) các tài liệu gốc có thể
cần đến nhiều mối ghép (join) phức tạp.
Hình 1: Việc băm nhỏ (shred) một tài liệuXML
Phụ thuộc vào sự phức tạp và khả năng thay đổi, mục đích của các tài liệu XML, việc
băm nhỏ (shred) có hoặc không thể là một tùy chọn bắt buộc. Bảng 1 tóm tắt các ưu điểm
và nhược điểm của việc băm nhỏ (shred) dữliệuXMLthành các bảng quanhệ.
Là lựa chọn thích hợp khi… Là lựa chọn không thích hợp khi…
DữliệuXML được chỉ định đang
cung cấp cho một cơ sở dữliệuquan
hệ đang tồn tại.
DữliệuXML của bạn phức tạp, xếp
chồng và khó cho việc bản đồ hóa
thành một giản đồ quanhệ.
Các tài liệuXML không thể hiện
được các đối tượng logic doanh
nghiệp cần được duy trì.
Vi
ệc bản đồ hóa định dạng XML của
bạn thành giản đồ quan hệ dẫn đến
một số lượng lớn các bảng.
Mục đích chính của bạn là cho phép
các ứng dụng quan hệ đang tồn tại có
thể truy cập vào dữliệuXML
XML Schema của bạn hay thay đổi
Bạn ưng thuận với giản đồ quan hệ
của mình và thích sử dụng nó nếu có
thể.
Mục tiêu của bạn là quản lý các tài
liệu XML như các đối tượng doanh
nghiệp nguyên vẹn.
Cấu trúc của dữliệuXML của bạn dễ
dàng được bản đồ hóa thành các bảng
dữ liệuquanhệ.
Bạn thường cần xây dựng lại các tài
liệu được băm nhỏ hoặc một phần
trong chúng.
Định dạng XML của bạn tương đối
ổn định và ít thay đổi.
Sử dụng dữliệuXML trong một cơ
sở dữliệu với tốc độ cao cho ứng
dụng của bạn.
Bạn ít khi cần xây dựng lại các tài
liệu được băm nhỏ.
Việc truy vấn hoặc nâng cấp dữliệu
với SQL quan trọng hơn chèn.
Bảng 1. Khi việc băm nhỏ là hay không là một lựa chọn thích hợp
Trong nhiều kịch bản ứng dụng XML, cấu trúc và cách sử dụng dữliệuXML không
thích ứng với việc băm nhỏ. Nguyên nhân xảy ra điều này là do DB2 hỗ trợ các cột XML
có thể cho phép bạn đánh chỉ số và truy vấn dữliệu mà không cần đến quá trình chuyển
đổi. Đôi khi bạn sẽ thấy các yêu cầu ứng dụng của mình có thể đáp ứng tốt nhất với
partial shredding hoặc hybrid XML storage. Ở đây:
Partial shredding có nghĩa rằng chỉ một tập nhỏ các thành phần hoặc các thuộc
tính từ mỗi một tài liệuXML đi vào được băm nhỏ thành các bảng quanhệ. Điều
này khá hữu dụng nếu ứng dụng quan hệ không yêu cầu tất cả giá trị dữliệu từ
mỗi tài liệu XML. Trong các trường hợp, nơi việc băm nhỏ toàn bộ mỗi một tài
liệu diễn ra khó khăn và yêu cầu một giản đồ quan hệ phức tạp, partial shredding
có thể đơn giản hóa việc bản đồ hóa sang giản đồ quan hệ một cách đáng kể.
Hybrid XML storage có nghĩa trong lúc chèn một tài liệuXML vào một cột XML,
thành phần được chọn hoặc các giá trị của thuộc tính được trích rút và thành phần
dự trữ được lưu trong các cột quanhệ.
Nếu bạn muốn băm nhỏ các tài liệu XML, toàn bộ hoặc một phần, DB2 cung cấp cho bạn
một tập các tính năng phong phú để thực hiện một số hoặc tất cả những vấn đề dưới đây:
Thực hiện các phép biến đổi giá trị dữliệu trước khi chèn vào các cột quanhệ.
Băm nhỏ cùng một giá trị thuộc tính hoặc thành phần vào nhiều cột của các bảng
giống hay khác nhau.
Băm nhỏ nhiều thành phần khác hay thuộc tính khác nhau vào cùng một cột trong
một bảng.
Chỉ định các điều kiện chi phối cho các thành phần nào đó được hay không được
băm nhỏ. Cho ví dụ, băm nhỏ địa chỉ của một tài liệu khách hàng chỉ khi country
là Canada.
Hợp lệ hóa các tài liệuXML với một XML Schema trong suốt quá trình băm nhỏ.
Lưu tài liệuXML đầy đủ cùng với dữliệu được băm.
DB2 9 cho z/OS và DB2 9.x cho Linux, UNIX, và Windows hỗ trợ hai phương pháp băm
nhỏ:
Các câu lệnh INSERT của SQL sử dụng hàm XMLTABLE. Hàm này sẽ điều hướng
vào một tài liệu đầu vào và sinh ra một hoặc nhiều hàng quan hệ dùng để chèn vào
bảng quanhệ.
Phân tách với một XML Schema được chú thích. Do XML Schema định nghĩa cấu
trúc của các tài liệuXML nên các chú thích có thể được bổ sung vào giản đồ để
định nghĩa cách các thành phần và thuộc tính được bản đồ hóa thành các bảng
quan hệ như thế nào.
Bảng 2 và bảng 3 sẽ giới thiệu về những ưu điểm và nhược điểm của phương pháp
XMLTABLE và phương pháp giản đồ được chú thích.
Ưu điểm của phương pháp XMLTABLE Nhược điểm của phương pháp
XMLTABLE
Cho phép bạn băm nhỏ dữliệu thậm
chí không có XML Schema.
Mỗi một bảng mục tiêu mà bạn
muốn băm nhỏ vào, bạn phải cần
đến một câu lệnh INSERT
Không yêu cầu bạn hiểu ngôn ngữ
XML Schema hoặc hiểu các chú thích
của giản đồi cho việc phân tách.
Bạn có thể phải kết hợp nhiều câu
lệnh INSERT trong một thủ tục
được lưu.
Thường dễ sử dụng hơn các giản đồ có
chú thích vì được dựa trên SQL và
Xpath.
Bạn có thể sử dụng các hàm và các bi
ểu
thức quen thuộc của XPath, XQuery,
hoặc SQL để trích rút và điều ch
ỉnh các
giá trị dữ liệu.
Thường yêu cầu đến ít khối lư
ợng công
việc trong quá trình phát triển XML
Schema.
Quá trình băm nhỏ có thể cần đến dữ
liệu từ nhiều nguồn quan hệ và XML
nếu cần, chẳng hạn như các giá trị từ
Không có hỗ trợ giao diện người
dùng cho vi
ệc thực thi các câu lệnh
INSERT và các hàm XMLTABLE
cần thiết. Bạn cần phải biết về
XPath và SQL/XML.
các chuỗi DB2 hoặc dữliệu tra cứu từ
các bảng quan hệ khác.
Có thể cung cấp hiệu suất tốt hơn
phương pháp phân tách giản đồ chú
thích.
Bảng 2. Phương pháp XMLTABLE
Ưu điểm của phương pháp Nhược điểm của phương pháp
Việc bản đồ hóa từ XML vào các bảng
quan hệ có thể được định nghĩa bằng một
GUI trong IBM Data Studio Developer.
Không cho phép bạn băm nhỏ
khi không có XML Schema.
Nếu bạn băm nhỏ dữliệuXML phức tạp
vào một số lượng lớn các bảng, cần ít nỗ
lực trong việc viết mã hơn so với phương
pháp XMLTABLE
B
ạn có thể phải tự copy các chú
thích khi bắt đầu sử dụng một
phiên bản mới của XML
Schema.
Cung cấp số lượng lớn những thông tin
chuẩn đoán chi tiết nếu một số tài liệu bị
băm nhỏ thất bại.
Mặc dù có giao diện hỗ trợ
người dùng nhưng bạn vẫn cần
biết ngôn ngữ XML Schema.
Việc chú thích một XML
Schema có thể sẽ phức tạp nếu
một giản đồ bản thân nó là
phức tạp.
Bảng 3: Phương pháp phân tách giản đồ chú thích
Băm nhỏ với hàm XMLTABLE
Hàm XMLTABLE là một hàm SQL sử dụng các biểu thức XQuery để tạo các hàng quan
hệ từ một tài liệu đầu vào XML. Trong phần này chúng tôi sẽ miêu tả cho các bạn cách
sử dụng hàm XMLTABLE trong câu lệnh để thực hiện việc băm nhỏ. Chúng ta sử dụng
kịch bản băm nhỏ trong hình 1 làm ví dụ.
Bước đầu tiên chúng ta cần thực hiện là tạo một bảng quan hệ mục tiêu, nếu chưa có. Với
kịch bản trong hình 1, các bảng mục tiêu được định nghĩa như bên dưới:
CREATE TABLE address(cid INTEGER, name VARCHAR(30),
street VARCHAR(40), city VARCHAR(30))
CREATE TABLE phones(cid INTEGER, phonetype VARCHAR(10),
phonenum VARCHAR(20))
Dựa vào định nghĩa của các bảng mục tiêu bạn có thể xây dựng các câu lệnh INSERT để
băm nhỏ các tài liệuXML gửi vào. Các câu lệnh INSERT phải có dạng INSERT INTO
SELECT FROM XMLTABLE, như thể hiện trong hình 2. Mỗi một hàm XMLTABLE
đều gồm có một bộ marker tham số ("?"), thông qua đó một ứng dụng có thể chuyển qua
[...]... nhìn quan hệ trên dữ liệuXML bằng cách sử dụng các biểu thức XMLTABLE Điều này cho phép bạn cung cấp các ứng dụng có khung nhìn quan hệ hoặc hybrid đối với dữ liệuXML mà không cần phải lưu dữliệu dưới định dạng quan hệ hoặc hybrid Cách thức này rất hữu dụng nếu bạn muốn tránh sự phức tạp trong quá trình chuyểnđổi một số lượng lớn dữ liệuXMLthành định dạng quan hệ Cấu trúc cơ bản SELECT FROM XMLTABLE... của tài liệuXML trong một số lượng lớn các bảng có thể làm cho chuyên gia phát triển ứng dụng khó khăn trong việc hiểu và truy vấn dữliệu Để cải thiện hiệu suất chèn XML và giảm số lượng bảng trong cơ sở dữ liệu, bạn có thể lưu các tài liệuXML dưới dạng Hybrid XML Storage Phương pháp này sẽ trích rút các giá trị hoặc các thuộc tính của các thành phần XML được chọn và lưu chúng vào các cột quan hệ.. . tài liệuXML thông thường như thể hiện trong hình 5 Tài liệu thường này là một chuỗi được phân biệt bằng dấu ngoặc đơn và được chuyểnđổithành kiểu dữ liệuXML với hàm XMLPARSE Một cách khác nữa là bạn có thể đọc tài liệu đầu vào từ hệ thống file bằng một trong các UDP, các UDP này được minh chứng trong hình 6 INSERT INTO hybrid(cid, name, city, info) SELECT x.custid, x.custname, x.city, x.doc FROM XMLTABLE('$i'... AS "i" Việc load các tài liệu đầu vào vào bảng có thể khá thuận lợi nếu bạn phải băm nhỏ nhiều tài liệu Tiện ích LOAD sẽ hoàn trả song song quá trình phân tách cú pháp XML, làm giảm được thời gian chuyển các tài liệu vào cơ sở dữliệu Khi các tài liệu được lưu trong một cột XML dưới định dạng đã được phân tách, hàm XMLTABLE có thể băm nhỏ các tài liệu mà không cần phân tách XML Câu lệnh INSERT có thể... nhìn cho dữ liệuXML Truy vấn trên khung nhìn trong hình 7 gồm một thuộc tính SQL cho cột city trong khung nhìn Các giá trị trong cột city đến từ một thành phần XML trong cột XML ở dưới Bạn có thể tăng tốc cho truy vấn này bằng cách tạo một XML index trên /customerinfo/addr/city cho cột info của bảng customer DB2 9 cho z/OS và DB2 9.7 cho Linux, UNIX, và Windows có thể chuyểnđổi thuộc tính quan hệ.. .(pass) tài liệuXML được băm nhỏ Các rule SQL yêu cầu bộ marker tham số phải biến đổithành kiểu dữliệu thích hợp Mệnh đề SELECT sẽ chọn các cột được tạo ra bởi hàm XMLTABLE nhằm chèn vào các bảng address và phones một cách tương ứng INSERT INTO address(cid, name, street, city) SELECT x.custid, x.custname, x.str, x.place FROM XMLTABLE('$i/customerinfo' PASSING CAST(? AS XML) AS "i" COLUMNS... pass tài liệu đầu vào một lần, và không quan tâm đến số lượng của các câu lệnh trong thủ tục lưu trữ Cách khác, các câu lệnh INSERT trong hình 2 có thể đọc một tập các tài liệu đầu vào từ cột XML Giả dụ các tài liệu được load vào cột XML info trong bảng customer Sau đó bạn cần thay đổi một dòng trong mỗi câu lệnh INSERT trong hình 2 để đọc tài liệu đầu vào từ bảng customer: FROM customer, XMLTABLE('$i/customerinfo'... PRIMARY KEY, name VARCHAR(30), city VARCHAR(25), info XML) Hình 4 thể hiện câu lệnh INSERT để cư trú bảng này Hàm XMLTABLE sử dụng tài liệuXML như một dữliệu đầu vào thông qua một bộ marker tham số Định nghĩa cột trong hàm XMLTABLE sẽ sinh 4 cột tương xứng với định nghĩa của bảng mục tiêu hybrid Biểu thức tạo hàng trong hàm XMLTABLE $i sẽ tạo một tài liệu đầu vào đầy đủ Biểu thức này là đầu vào cho các... doc XML PATH '.' ) AS x; Hình 4: Lưu một tài liệuXML theo kiểu hybrid Hiện tại bạn sẽ không thể định nghĩa các ràng buộc (constraint) trong BD2 để thực thi tính toàn vẹn giữa các cột và các giá trị quan hệ trong một tài liệuXML ở cùng một hàng Mặc dù vậy bạn lại có thể định nghĩa các bẫy sự kiện (trigger) INSERT và UPDATE trên bảng để cư trú các cột quan hệ một cách tự động bất cứ khi nào một tài liệu. .. các cột quan hệ bên cạnh tài liệuXML Ví dụ trong phần trước đã sử dụng hai bảng, address và phones, là các bảng mục tiêu cho việc băm nhỏ các tài liệu khách hàng Tuy nhiên bạn có thể chỉ sử dụng một bảng có chứa các giá trị cid, name, và city của khách hàng trong các cột quan hệ và tài liệuXML đầy đủ với các thành phần lặp phone, còn các thông tin khác trong một cột XML Nếu vậy bạn có thể định nghĩa .
Chuyển đổi XML thành
dữ liệu quan hệ
Trong hướng dẫn này chúng tôi sẽ giới thiệu cho các bạn một số phương pháp
chuyển đổi các tài liệu XML thành. sở dữ liệu quan
hệ đang tồn tại.
Dữ liệu XML của bạn phức tạp, xếp
chồng và khó cho việc bản đồ hóa
thành một giản đồ quan hệ.
Các tài liệu XML