Chuyển đổi XML thành dữ liệu quan hệ sử dụng trong DB2

Để thực hiện quá trình băm nhỏ giản đồ có chú thích, bạn hãy thực hiện theo các cách

sau:

 Nhận dạng và tạo các bảng mục tiêu quan hệ sẽ giữ dữ liệu được băm nhỏ.

 Chú thích XML Schema của bạn để định nghĩa việc bản đồ hóa từ XML thành các

bảng quan hệ.

 Đăng ký XML Schema trong DB2 XML Schema Repository.

 Băm nhỏ các tài liệu XML với các lệnh của bộ xử lý lệnh Command Line

Processor hoặc các thủ tục.

pdf25 trang | Chuyên mục: XML | Chia sẻ: dkS00TYs | Ngày: 17/10/2014 | Lượt xem: 1382 | Lượt tải: 3download
Tóm tắt nội dung Chuyển đổi XML thành dữ liệu quan hệ sử dụng trong DB2, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 ); 
callStmt.setString(2, "cust2xsd" ); 
// document to be shredded: 
callStmt.setBinaryStream(3,xmldocis,(int)xmldoc.length() ); 
callStmt.setString(4, "mydocument26580" ); 
// no schema validation in this call: 
callStmt.setInt(5, 0); 
callStmt.execute(); 
Hình 13: Mã Java để triệu gọi thủ tục XDBDECOMPXML 
Tham số đầu vào cho các tài liệu XML là kiểu CLOB AS LOCATOR trong DB2 cho 
z/OS, còn nó sẽ là kiểu BLOB(1M) trong DB2 cho Linux, UNIX, và Windows. Nếu bạn 
mong đợi các tài liệu XML của mình lớn hơn 1MB, hãy sử dụng một trong các thủ tục 
được liệt kê trong bảng 7. Các thủ tục này đều giống nhau ngoại từ tên của chúng và kích 
thước của tham số đầu vào xmldoc. Khi bạn gọi một thủ tục, DB2 sẽ chỉ định bộ nhớ theo 
kích thước được tuyên bố của các tham số đầu vào. Cho ví dụ, nếu tất cả các tài liệu đầu 
vào của bạn hầu như đều có kích thước 10MB, thủ tục XDBDECOMPXML10MB sẽ là 
một lựa chọn tốt nhất cho bộ nhớ. 
Thủ tục Kích thước tài liệu Được hỗ trợ từ
XDBDECOMPXML ≤1MB DB2 9.1 
XDBDECOMPXML10MB ≤10MB DB2 9.1 
XDBDECOMPXML25MB ≤25MB DB2 9.1 
XDBDECOMPXML50MB ≤50MB DB2 9.1 
XDBDECOMPXML75MB ≤75MB DB2 9.1 
XDBDECOMPXML100MB ≤100MB DB2 9.1 
XDBDECOMPXML500MB ≤500MB DB2 9.5 FP3 
XDBDECOMPXML1GB ≤1GB DB2 9.5 FP3 
XDBDECOMPXML1_5GB ≤1.5GB DB2 9.7 
XDBDECOMPXML2GB ≤2GB DB2 9.7 
Bảng 7: Các thủ tục lưu trữ cho các kích thước tài liệu khác nhau (DB2 cho Linux, 
UNIX, và Windows) 
Để có được khả năng tương thích nền tảng, DB2 cho z/OS hỗ trợ thủ tục 
XDBDECOMPXML100MB với các tham số giống như DB2 cho Linux, UNIX, và 
Windows, gồm có cả tham số để hợp lệ hóa. 
Phân tách các tài liệu XML dưới dạng kích thước 
DB2 9.7 cho Linux, UNIX, và Windows giới thiệu một thủ tục mới mang tên 
XDB_DECOMP_XML_FROM_QUERY. Nó sử dụng một giản đồ chú thích để phân 
tách một hoặc nhiều tài liệu XML đã chọn từ cột có kiểu XML, BLOB, hoặc VARCHAR 
FOR BIT DATA. Sự khác biệt chính đối với thủ tục XDBDECOMPXML là 
XDB_DECOMP_XML_FROM_QUERY sử dụng một truy vấn SQL như một tham số và 
thực thi nó để thu được các tài liệu đầu vào từ bảng DB2. Với số lượng các tài liệu lớn 
hơn, thao tác LOAD theo sau là "bulk decomp" (tách khối lượng lớn) có thể hiệu quả hơn 
so với việc băm nhỏ các tài liệu. Hình 14 thể hiện các tham số của thủ tục này. Các tham 
số commit_count và allow_access tương tự như các tham số tương ứng của tiện ích 
IMPORT DB2. Các tham số total_docs, num_docs_decomposed, và result_report là các 
tham số đầu ra để cung cấp thông tin về kết quả của quá trình băm nhỏ với khối lượng 
lớn. Tất cả các tham số đều được giải thích trong bảng 8. 
>>--XDB_DECOMP_XML_FROM_QUERY--(--rschema--,--xmlschema--,-->
>--query--,--validation--,--commit_count--,--allow_access--,----> 
>--reserved--,--reserved2--,--continue_on_error--,--------------> 
>--total_docs--,--num_docs_decomposed--,--result_report--)-->< 
Hình 14: Thủ tục XDB_DECOMP_XML_FROM_QUERY 
Tham số Mô tả 
rschema Tương tự như với XDBDECOMPXML 
xmlschema Tương tự như xmlschemaname cho XDBDECOMPXML 
query Chuỗi truy vấn kiểu CLOB(1GB), không nhận giá trị NULL. Truy vấn 
phải là một câu lệnh SQL hoặc SQL/XML SELECT và phải trả về hai cột. 
Cột đầu tiên phải chứa một Id tài liệu khác với tài liệu XML trong cột thứ 
hai của tập kết quả. Cột thứ hai chứa các tài liệu XML được băm nhỏ và 
phải có kiểu XML, BLOB, VARCHAR FOR BIT DATA, hoặc LONG 
VARCHAR FOR BIT DATA. 
validation Các giá trị có thể là: 0 (không hợp lệ) và 1 (sự hợp lệ được thực hiện). 
commit_count Giá trị số nguyên bằng hoặc lớn hơn 0. Giá trị 0 có nghĩa thủ tục không 
thực hiện bất cứ cam kết nào. Giá trị n có nghĩa rằng một cam kết sẽ được 
thực hiện cứ sau n sự phân tách tài liệu thành công. 
allow_access Nhận giá trị là 1 hoặc 0. Nếu giá trị bằng 0, thủ tục sẽ có được một khóa 
dành riêng trên tất cả các bảng được tham chiếu trong XML Schema chú 
thích. Nếu giá trị là 1, thủ tục sẽ có được một khóa chia sẻ. 
reserved, 
reserved2 
Các tham số được dự trữ cho sử dụng sau này và phải là NULL. 
continue_on 
_error 
Có thể là 1 hoặc 0. Giá trị 0 có nghĩa thủ tục sẽ stop do tài liệu đầu tiên 
không thể được phân tách; cho ví dụ, nếu tài liệu không tương xứng với 
XML Schema. 
total_docs Một tham số đầu ra chỉ thị tổng số các tài liệu mà thủ tục cố gắng phân 
tách. 
num_docs_ 
decomposed 
Tham số đầu ra chỉ thị số lượng các tài liệu đã được phân tách thành công. 
result_report Tham số đầu ra kiểu BLOB(2GB). Chứa một tài liệu XML để cung cấp 
các thông tin chuẩn đoán cho các tài liệu không được phân tách thành 
công. Báo cáo này sẽ không được tạo ra nếu tất cả các tài liệu đã được băm 
nhỏ thành công. 
Bảng 8: Các tham số cho XDB_DECOMP_XML_FROM_QUERY 
Hình 15 thể hiện một lời gọi thủ tục XDB_DECOMP_XML_FROM_QUERY trong 
CLP. Thao tác gọi thủ tục này sẽ đọc tất cả các tài liệu XML từ cột info của bảng 
customer và băm nhỏ chúng với XML Schema db2admin.cust2xsd có chú thích. Thủ tục 
cam kết với chu kỳ 25 tài liệu và không stop nếu một tài liệu nào đó không thể được băm 
nhỏ. 
call SYSPROC.XDB_DECOMP_XML_FROM_QUERY 
('DB2ADMIN', 'CUST2XSD', 'SELECT cid, info FROM customer',
 0, 25, 1, NULL, NULL, '1',?,?,?) ; 
 Value of output parameters 
 -------------------------- 
 Parameter Name : TOTALDOCS 
 Parameter Value : 100 
 Parameter Name : NUMDOCSDECOMPOSED 
 Parameter Value : 100 
 Parameter Name : RESULTREPORT 
 Parameter Value : x'' 
 Return Status = 0 
Hình 15: Gọi thủ tục SYSPROC.XDB_DECOMP_XML_FROM_QUERY 
Nếu bạn thường thực hiện băm nhỏ với khối lượng lớn trong CLP, hãy sử dụng lệnh 
DECOMPOSE XML DOCUMENTS thay vì thủ tục. Cách thức này sẽ thuận tiện hơn 
trong trường hợp thao tác với dòng lệnh mà vẫn thực hiện các công việc các công cụ như 
thủ tục XDB_DECOMP_XML_FROM_QUERY. Hình 16 thể hiện cú pháp của lệnh. 
Các mệnh đề khác nhau và các từ khóa của lệnh đều có nghĩa giống như các tham số thủ 
tục tương ứng. Cho ví dụ, query là lệnh SELECT cung cấp các tài liệu đầu vào, và xml-
schema-name là Id SQL hai phần của XML Schema chú thích. 
>>-DECOMPOSE XML DOCUMENTS IN----'query'----XMLSCHEMA------->
 .-ALLOW NO ACCESS-. 
>--xml-schema-name--+----------+--+-----------------+-----------> 
 '-VALIDATE-' '-ALLOW ACCESS----' 
>--+----------------------+--+-------------------+--------------> 
 '-COMMITCOUNT--integer-' '-CONTINUE_ON_ERROR-' 
>--+--------------------------+-------------------------------->< 
 '-MESSAGES--message-file- 
Hình 16: Cú pháp của lệnh DECOMPOSE XML DOCUMENTS 
Hình 17 minh chứng sự thực thi của lệnh DECOMPOSE XML DOCUMENTS trong 
DB2 Command Line Processor. 
DECOMPOSE XML DOCUMENTS IN 'SELECT cid, info FROM customer'
XMLSCHEMA db2admin.cust2xsd MESSAGES decomp_errors.xml ; 
DB216001I The DECOMPOSE XML DOCUMENTS command successfully 
 decomposed all "100" documents. 
Hình 17: Ví dụ của lệnh DECOMPOSE XML DOCUMENTS 
Nếu bạn không chỉ định message-file thì một báo cáo lỗi sẽ xuất hiện ở đầu ra. Hình 18 
thể hiện một báo cáo lỗi. Với tài liệu bị thất bại trong quá trình băm nhỏ, một thông báo 
lỗi sẽ thể hiện Id tài liệu (xdb:documentId). Id này được thu về từ cột đầu tiên được sinh 
ra bởi câu lệnh SQL trong lệnh DECOMPOSE XML DOCUMENTS. Báo cáo lỗi cũng 
có chứa cả thông báo lỗi DB2 cho các tài liệu bị thất bại. Hình 18 thể hiện tài liệu 1002 
gồm có một thuộc tính XML không mong đợi có tên gọi status, và tài liệu 1005 có chứa 
một thành phần hoặc giá trị thuộc tính abc không hợp lệ vì XML Schema mong muốn tìm 
ra giá trị kiểu xs:integer. 
<xdb:errorReport 
 xmlns:xdb=""> 
 1002 
 SQL16271N Unknown attribute "status" at or 
 near line "1" in document "1002". 
 1005 
 SQL16267N An XML value "abc" at or near 
 line "1" in document "1005" is not valid according to 
 its declared XML schema type "xs:integer" or is outside 
 the supported range of values for the XML schema type 
Hình 18: Báo cáo lỗi từ quá trình phân tách với khối lượng lớn 
Kết luận 
Khi bạn muốn thực hiện việc băm nhỏ các tài liệu XML thành các bảng quan hệ, hãy nhớ 
rằng XML và dữ liệu quan hệ được dựa trên các mô hình dữ liệu khác nhau về nền tảng. 
Mối quan hệ 1-n được diễn giải bằng cách sử dụng nhiều bảng và join các mối quan hệ 
giữa chúng. Ngược lại, các tài liệu XML thiên về có cấu trúc xếp chồng và thứ bậc có thể 
thể hiện nhiều mối quan hệ 1-n trong một tài liệu. XML cho phép các thành phần được 
lặp lại với số lần bất kỳ và XML Schemas có thể định nghĩa hàng trăm, thậm chí hàng 
nghìn các thành phần tùy chọn và các thuộc tính để có thể tồn tại hay không tồn tại trong 
bất cứ tài liệu đã cho nào. Do có sự khác nhau này, nên việc băm nhỏ dữ liệu XML vào 
các bảng quan hệ có thể khó khăn, không hiệu quả, và đôi khi khá phức tạp. 
Nếu kiến trúc của dữ liệu XML nằm trong giới hạn của sự phức tạp cho phép đối với việc 
bản đồ thành các bảng quan hệ, thêm vào đó nếu định dạng XML của bạn không thể thay 
đổi theo thời gian thì việc băm nhỏ XML đôi khi có thể là một cách làm hữu dụng để 
cung cấp các ứng dụng quan hệ và các phần mềm báo cáo đang tồn tại. 
DB2 cung cấp hai phương pháp băm nhỏ dữ liệu. phương pháp đầu tiên sử dụng các câu 
lệnh INSERT của SQL với hàm XMLTABLE. Một câu lệnh INSERT như vậy được yêu 
cầu cho mỗi một bảng mục tiêu và nhiều câu lệnh có thể được kết hợp trong một thủ tục 
lưu trữ để tránh lặp lại việc phân tích các tài liệu XML giống nhau. Các câu lệnh băm nhỏ 
có thể gồm có các hàm của XQuery và SQL, join vào các bảng khác, hoặc tham chiếu 
cho chuỗi DB2. Các tính năng này cho phép tùy chỉnh và có độ linh hoạt cao trong quá 
trình băm, tuy nhiên yêu cầu việc viết mã thủ công. Phương pháp thứ hai cho việc băm 
dữ liệu XML là sử dụng các chú thích trong một XML Schema để định nghĩa việc bản đồ 
hóa từ XML sang các bảng và các cột cơ sở dữ liệu. IBM Data Studio Developer cung 
cấp một giao diện trực quan giúp thuận tiện và không cần việc viết mã thủ công cho quá 
trình bản đồ hóa này. 

File đính kèm:

  • pdfChuyển đổi XML thành dữ liệu quan hệ sử dụng trong DB2.pdf