Altova XMLSpy® 2010 là trình biên tập và là môi tươờng phát triển XML bán chạy nhất thị trường cho các tác vụ tạo mẫu, biên tập, chuyển đổi cũng như dò lỗi các công nghệ dựa trên nền tảng XML. Ứng dụng cung cấp tr2inh biên tập XML và trình thiết kế lược đồ đồ họa, trình tạo mã, chuyển đổi tập tin, bộ dò lỗi, bộ tạo hồ sơ, tích hợp cơ sở dữ liệu hoàn chỉnh, hỗ trợ các tài liệu XSLT, XPath, XQuery, WSDL, SOAP, và Office Open XML (OOXML), cộng thêm các plug-in cho Visual Studio và Eclipse,...
Altova XMLSpy Enterprise 2010 v12 | Trình biên tập XML chuyên nghiệp
XMLSpy XML editor cung cấp sức mạnh bạn cần để tạo ra các ứng dụng mạng và XML tiên tiến nhất, đồng thời tính linh hoạt của chương trình cho phép bạn làm việc với XML thông qua các chế độ xem và các tùy chọn phù hợp nhất với những nhu cầu kinh doanh thích ứng với công việc.
Các đặc trưng và tính năng trong XML editor:
- Trình biên tập XML thông minh
- Hỗ trợ tập tin dung lượng rất lớn
- Biên tập XML ở chế độ văn bản hay đồ họa
- Các công cụ Schema-aware XQuery editor, XQuery debugger & XQuery profiler
- Cửa sổ đánh giá với chức năng xử lý lỗi cao cấp
- Cửa sổ phân tích XPath 1.0./2.0 Analyzer
- Trình biên tập lược đồ XML trực quan XML Schema editor
- Tích hợp cơ sở dữ liệu
- Trình biên tập DTD
- Phát triển dịch vụ Web
- Hỗ trợ các dữ liệu Open XML (OOXML) trong MS Office 2007
- Hỗ trợ XInclude và XPointer
- Trình biên tập WSDL giao diện đồ họa
- Tạo mã Java / C# / C++ từ các lược đồ XML
- Trình client và bộ dò lỗi cho SOAP
- Tích hợp vào Visual Studio & Eclipse
- Trình biên tập XSLT 1.0/2.0, bộ dò lỗi XSLT debugger & XSLT profiler
- Các giao diện lập trình ứng dụng (API) cho Java và COM
- Trình biên tập CSS
- Các điều khiển OLE và ActiveX
- Quản lý dự án XML
- Và nhiều tính năng khác nữa...
Tên phần mềm: Altova XMLSpy Enterprise 2010 v12
Chức năng chính: Trình biên tập XML chuyên nghiệp
Dung lượng: 42.27 MB
Download "Altova XMLSpy Enterprise 2010 v12" FULL đã có file Crack và hướng dẫn Crack
Hỗ trợ giải toán - tin Chia sẻ tài liệu, đề thi miễn phí ôn thi THPT Quốc Gia - Ôn thi Đại học và Học sinh giỏi ... toan, toan online, giai toan tren mang, ioe toan, tin, đại ...
Thứ Ba, 1 tháng 2, 2011
Altova XMLSpy Enterprise 2010 v12 | Trình biên tập XML chuyên nghiệp
Thứ Hai, 24 tháng 1, 2011
Nhập file XML có dung lượng lớn vào WordPress
Làm sao chuyển toàn bộ bài viết từ blog cũ sang blog mới (cùng là wordpress) khi mà file XML xuất ra từ blog cũ lớn hơn 2Mb: Mặc định các file xuất ra có đuôi XML từ blog cũ muốn nhập vào blog mới phải không lớn hơn 2 Mb. Nhưng thông thường ít có blog nào mà xuất ra flie XML có dung lượng nhỏ như vậy. Và khi đó bạn không thể nào nhập vào blog mới. Chẳng lẻ phải nhập thủ công. Blog này của mình được chuyển từ blogger sang.Khi bị vướng mình đã nghiên cứu, mò mẫn mãi, bây giờ thì các bạn thấy đấy… Phương pháp là phải chia nhỏ file XML mà bạn đã xuất ra và tải về trên máy tính của mình.
Để làm điều này bạn cần phải có một chương trình nhỏ, đặc biệt đó là WPsplitter (link DOwnLOad: http://www.mediafire.com/file/yic9albrt66idp1/WPsplitter.rar). Bạn download file này về cài đặt. Khi cài đặt thành công thì bạn chạy nó và chọn file XML cần chia nhỏ. Chương trình sẽ tự làm cho bạn. Sau đó bạn chỉ việc nhập từng file nhỏ này (có đuôi xxx.001, xxx.002,…).
Ok. Tuy nhiên có 2 điều lưu ý là:
1. Máy bạn phải cài VB6runtime.
(link phụ cho OS x86: http://www.mediafire.com/file/p5wmm3n17af7o3q/VB6.0-KB290887-X86.exe)
2. Nếu khi chạy, máy báo lỗi thiếu file commdlg32.ocx thì bạn phải download file này về máy và copy vào thư mục ../window/system32/.
Chúc các bạn thành công!
Thứ Sáu, 21 tháng 1, 2011
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 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.
»» Chuyển đổi XML thành dữ liệu quan hệ sử dụng trong DB2
Phương pháp chuyển đổi các tài liệu XML thành các hàng trong các bảng dữ liệu quan 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 quan hệ. 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ệu XML được chỉ định vào các cột và các hàng nằm trong các bảng dữ liệu quan hệ.
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ệu XML thà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ệu XML thành các bảng quan hệ.
Ư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 quan hệ. 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 quan hệ. 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ệu XML
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ệu XML thành các bảng quan hệ.
| Là lựa chọn thích hợp khi… | Là lựa chọn không thích hợp khi… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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ệu XML 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ệu XML đi vào được băm nhỏ thành các bảng quan hệ. Đ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ệu XML 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 quan hệ.
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 quan hệ.
- 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ệu XML với một XML Schema trong suốt quá trình băm nhỏ.
- Lưu tài liệu XML đầ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 quan hệ.
- 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ệu XML 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 |
|
|
|
|
|
|
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 |
|
|
|
|
|
|
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ệu XML 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 (pass) tài liệu XML được băm nhỏ. Các rule SQL yêu cầu bộ marker tham số phải biến đổi thà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 custid INTEGER PATH '@Cid', custname VARCHAR(30) PATH 'name', str VARCHAR(40) PATH 'addr/street', place VARCHAR(30) PATH 'addr/city' ) AS x ; INSERT INTO phones(cid, phonetype, phonenum) SELECT x.custid, x.ptype, x.number FROM XMLTABLE('$i/customerinfo/phone'PASSING CAST(? AS XML) AS "i" COLUMNS custid INTEGER PATH '../@Cid', number VARCHAR(15) PATH '.', ptype VARCHAR(10) PATH './@type') AS x ; |
Hình 2: Chèn thành phần XML và các giá trị của thuộc tính vào các cột quan hệ
Để cư trú hai bảng mục tiêu như được minh chứng trong hình 1, cả hai câu lệnh INSERT đều phải được thực thi với cùng một tài liệu XML đầu vào. Một phương pháp được thực hiện ở đây là ứng dụng phát cả hai câu lệnh trong một giao dịch (transaction) và đóng kết tài liệu XML giống nhau vào các bộ marker tham số cho cả hai câu lệnh. Phương pháp này làm việc tốt tuy nhiên có thể được tối ưu, vì tài liệu XML giống nhau được gửi từ máy khách đến máy chủ và được phân tách tại máy chủ DB2 hai lần, mỗi lần cho một câu lệnh INSERT. Quá trình này có thể tránh bằng cách kết hợp cả hai câu lệnh INSERT trong một thủ tục lưu trữ. Ứng dụng chỉ tạo một cuộc gọi thủ tục lưu trữ và 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' PASSING info 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ể được làm phong phú hơn các hàm Xquery, SQL hoặc join để thích ứng quá trình băm nhỏ với các yêu cầu cụ thể. Hình 3 cung cấp cho các bạn một ví dụ. Mệnh đề SELECT gồm có hàm RTRIM có nhiệm vụ remove các chỗ trống phía sau khỏi cột x.ptype. Biểu thức tạo hàng của hàm XMLTABLE có chứa thuộc tính dùng để ngăn chặn các số điện thoại gia đình bị băm nhỏ vào bảng mục tiêu. Biểu thức tạo cột cho các số điện thoại sử dụng hàm XQuery normalize-space, dùng để tách phần không gian trắng ở đầu và đuôi và thay thế mỗi một chuỗi bên trong của các ký tự trắng bằng một ký tự trống. Câu lệnh cũng thực hiện một hành động join cho bảng tra cứu areacodes để số điện thoại được chèn vào bảng phones chỉ khi mã vùng của nó được liệt trong bảng areacodes.
INSERT INTO phones(cid, phonetype, phonenum) SELECT x.custid, RTRIM(x.ptype), x.number FROM areacodes a, XMLTABLE('$i/customerinfo/phone[@type != "home"]'PASSING CAST(? AS XML) AS "i" COLUMNS custid INTEGER PATH '../@Cid', number VARCHAR(15) PATH 'normalize-space(.)', ptype VARCHAR(10) PATH './@type') AS x WHERE SUBSTR(x.number,1,3) = a.code; |
Hình 3: Sử dụng các hàm và join để điều chỉnh quá trình băm
Hybrid XML Storage
Trong nhiều tình huống, sự phức tạp của cấu trúc tài liệu XML có thể làm cho việc băm nhỏ trở nên khó khăn, không hiệu quả và gây phiền phức. Bên cạnh sự bất lợi về mặt hiệu suất của việc băm nhỏ, việc phân tán các giá trị của tài liệu XML 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ệu XML 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ệ bên cạnh tài liệu XML.
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ệu XML đầ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 bảng như dưới đây:
CREATE TABLE hybrid(cid INTEGER NOT NULL 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ệu XML 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 biểu thức tạo cột trong mệnh đề COLUMNS của hàm XMLTABLE. Cá biệt, biểu thức cột '.' sẽ trả về tài liệu đầu vào đầy đủ và tạo cột XML doc nhằm chèn vào cột info trong bảng mục tiêu.
INSERT INTO hybrid(cid, name, city, info) SELECT x.custid, x.custname, x.city, x.doc FROM XMLTABLE('$i' PASSING CAST(? AS XML) AS "i"COLUMNS custid INTEGER PATH 'customerinfo/@Cid', custname VARCHAR(30) PATH 'customerinfo/name', city VARCHAR(25) PATH 'customerinfo/addr/city', doc XML PATH '.' ) AS x; |
Hình 4: Lưu một tài liệu XML 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ệu XML ở 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 chèn hoặc được cập nhật.
Việc test các câu lệnh INSERT trong DB2 Command Line Processor (CLP) sẽ rất hữu dụng. Với mục đích này, bạn có thể thay thế bộ marker tham số bằng một tài liệu XML 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 đổi thành kiểu dữ liệu XML 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' PASSINGXMLPARSE(document '<customerinfo Cid="1001"> <name>Kathy Smith</name> <addr country="Canada"> <street>25 EastCreek</street> <city>Markham</city> <prov-state>Ontario</prov-state> <pcode-zip>N9C 3T6</pcode-zip> </addr> <phone type="work">905-555-7258</phone> </customerinfo>') AS "i" COLUMNS custid INTEGER PATH 'customerinfo/@Cid', custname VARCHAR(30) PATH 'customerinfo/name', city VARCHAR(25) PATH 'customerinfo/addr/city', doc XML PATH '.' ) AS x; |
Hình 5: Hybrid chèn câu lệnh bằng một tài liệu XML thường
INSERT INTO hybrid(cid, name, city, info) SELECT x.custid, x.custname, x.city, x.doc FROM XMLTABLE('$i' PASSINGXMLPARSE(document blobFromFile('/xml/mydata/cust0037.xml')) AS "i"COLUMNS custid INTEGER PATH 'customerinfo/@Cid', custname VARCHAR(30) PATH 'customerinfo/name', city VARCHAR(25) PATH 'customerinfo/addr/city', doc XML PATH '.' ) AS x; |
Hình 6: Hybrid chèn câu lệnh bằng một "FromFile" UDF
Logic chèn trong hình 4 và 5 và hình 6 hoàn toàn giống nhau. Chỉ có một sự khác biệt là cách tài liệu đầu vào được cung cấp như thế nào: thông qua bộ marker tham số, như chuỗi thông thường được phân biệt bằng dấu ngoặc đơn hoặc thông qua một UDP đọc tài liệu từ hệ thống file.
Các khung nhìn (View) quan hệ trên dữ liệu XML
Bạn có thể tạo các khung nhìn quan hệ trên dữ liệu XML 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ệu XML 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ệu XML thành định dạng quan hệ. Cấu trúc cơ bản SELECT ... FROM ... XMLTABLE được sử dụng trong câu lệnh INSERT ở phần trước cũng có thể được sử dụng trong các câu lệnh CREATE VIEW.
Lấy một ví dụ, giả dụ bạn muốn tạo một khung nhìn quan hệ cho các thành phần của các tài liệu XML trong bảng customer để trưng bày ra các giá trị định danh, tên, đường phố và thành phố (identifier, name, street, và city) của khách hàng. Hình 7 thể hiện định nghĩa khung nhìn tương ứng cộng với một truy vấn SQL cho khung nhìn.
CREATE VIEW custview(id, name, street, city) AS SELECT x.custid, x.custname, x.str, x.place FROM customer, XMLTABLE('$i/customerinfo' PASSING info AS "i"COLUMNS custid INTEGER PATH '@Cid', custname VARCHAR(30) PATH 'name', str VARCHAR(40) PATH 'addr/street', place VARCHAR(30) PATH 'addr/city' ) AS x; SELECT id, name FROM custview WHERE city = 'Aurora'; ID NAME ----------- ------------------------------ 1003 Robert Shoemaker 1 record(s) selected. |
Hình 7: Việc tạo một khung nhìn cho dữ liệu XML
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ệ city = 'Aurora' thành thuộc tính XML trong cột XML ở dưới để có thể sử dụng XML index. Tuy nhiên điều này không thể thực hiện trong DB2 9.1 và DB2 9.5 cho Linux, UNIX, và Windows. Trong các phần trước của BD2, nhóm cột XML trong định nghĩa khung nhìn và ghi điều kiện tìm kiếm như một thuộc tính XML, xem trong truy vấn dưới đây. Nếu không sẽ không thể sử dụng XML index.
SELECT id, name
FROM custview
WHERE XMLEXISTS('$INFO/customerinfo/addr[city = "Aurora"]')(Còn nữa)
Văn Linh (Theo Informit)
Nguồn: Quản Trị Mạng
Chuyển đổi XML thành dữ liệu quan hệ sử dụng trong DB2
Băm nhỏ với XML Schema chú thích
Trong phần tiếp theo này chúng tôi sẽ giới thiệu cho các bạn một phương pháp khác để băm nhỏ các tài liệu XML thành các bảng quan hệ. Phương pháp này được gọi là băm nhỏ giản đồ chú thích hay phân tách lược đồ chú thích vì nó dựa trên các chú thích trong XML Schema. Các chú thích này sẽ định nghĩa cách các thành phần XML và các thuộc tính trong dữ liệu XML của bạn để bản đồ hóa vào các cột trong các bảng quan hệ như thế nào.
»» Chuyển đổi XML thành dữ liệu quan hệ
Để 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.
Giả dụ bạn đã định nghĩa các bảng quan hệ mà bạn muốn băm nhỏ, sau đây chúng ta sẽ quan sát việc chú thích một XML Schema.
Việc chú thích XML Schema
Các chú thích của giản đồ, là các thành phần và các thuộc tính bổ sung trong một XML Schema, nhằm cung cấp các thông tin bản đồ hóa. BD2 có thể sử dụng các thông tin này để băm nhỏ các tài liệu XML vào các bảng quan hệ. Cần biết rằng các chú thích sẽ không thay đổi ngữ nghĩa học của XML Schema. Nếu một tài liệu hợp lệ với giản đồ có chú thích thì nó cũng hợp lệ hóa với giản đồ gốc và ngược lại. Bạn có thể sử dụng giản đồ có chú thích để hợp lệ hóa các tài liệu XML giống như XML Schema gốc.
Dưới đây là một dòng từ một XML Schema:
<xs:element name="street" type="xs:string" minOccurs="1"/>
Dòng trên định nghĩa một thành phần XML có tên gọi street, và tuyên bố rằng dữ liệu của nó là xs:string, thành phần này phải xuất hiện tối thiểu một lần. Bạn có thể bổ sung một chú thích vào định nghĩa của thành phần này để chỉ thị nó là thành phần sẽ được băm nhỏ vào cột STREET của bảng ADDRESS. Chú thích gồm có hai thuộc tính bổ sung trong định nghĩa của thành phần:
<xs:element name="street" type="xs:string" minOccurs="1"
db2-xdb:rowSet="ADDRESS" db2-xdb:column="STREET"/>
Chú thích như vậy cũng có thể được cung cấp cho các thành phần giản đồ thay vì các thuộc tính, xem thể hiện bên dưới. Bạn sẽ thấy trong hình 8 rằng tại sao điều này lại hữu dụng.
<xs:element name="street" type="xs:string" minOccurs="1">
<xs:annotation>
<xs:appinfo>
<db2-xdb:rowSetMapping>
<db2-xdb:rowSet>ADDRESS</db2-xdb:rowSet>
<db2-xdb:column>STREET</db2-xdb:column>
</db2-xdb:rowSetMapping>
</xs:appinfo>
</xs:annotation>
<xs:element/>
Tiền tố xs được sử dụng cho tất cả các cấu trúc thuộc về ngôn ngữ XML Schema, tiền tố db2-xdb được sử dụng cho tất cả các chú thích giản đồ DB2. Các tiền tố này giúp bạn có thể phân biệt một cách rõ ràng và bảo đảm rằng giản đồ có chú thích hợp lệ hóa với các tài liệu XML như giản đồ gốc.
Có 14 kiểu chú thích khác nhau. Chúng cho phép bạn chỉ định những gì băm nhỏ, nơi băm, cách lọc hoặc biến đổi dữ liệu được băm nhỏ và thứ tự nào để chèn vào các bảng mục tiêu. Bảng 4 cung cấp cho các bạn một cái nhìn tổng quan về các chú thích có sẵn, chúng được chia thành các nhóm logic theo nhiệm vụ của người dùng. Các chú thích riêng lẻ sẽ được miêu tả kỹ hơn trong bảng 5.
| Nếu bạn muốn | Sử dụng chú thích |
Chỉ định các bảng mục tiêu để băm | db2-xdb:rowSet db2-xdb:column db2-xdb:SQLSchema db2-xdb:defaultSQLSchema |
Chỉ định những gì cần băm | db2-xdb:contentHandling |
Chuyển đổi các giá trị dữ liệu trong khi băm | db2-xdb:expression db2-xdb:normalization db2-xdb:truncate |
Lọc dữ liệu | db2-xdb:condition db2-xdb:locationPath |
Bản đồ hóa một thành phần hoặc thuộc tính vào nhiều cột. | db2-xdb:rowSetMapping |
Bản đồ hóa một số thành phần hoặc thuộc tính vào cùng cột | db2-xdb:table |
Định nghĩa thứ tự trong các hàng được chèn vào bảng mục tiêu, tránh các phá vỡ tính toàn vẹn. | db2-xdb:rowSetOperationOrder db2-xdb:order |
Bảng 4. Tổng quan và việc nhóm các chú thích của giản đồ
Chú thích | Mô tả |
db2-xdb:defaultSQLSchema | Giản đồ quan hệ mặc định cho các bảng mục tiêu |
db2-xdb:SQLSchema | Ghi đè giản đồ mặc định cho các bảng riêng rẽ. |
db2-xdb:rowSet | Tên bảng mà thành phần hoặc thuộc tính được bản đồ hóa vào |
db2-xdb:column | Tên cột và thành phần hoặc thuộc tính được bản đồ hóa |
db2-xdb:contentHandling | Với một thành phần XML, chú thích này sẽ định nghĩa cách lấy giá trị được chèn vào cột mục tiêu. |
db2-xdb:truncate | Chỉ định giá trị sẽ được cắt hay không nếu chiều dài của nó lớn hơn chiều dài của cột mục tiêu. |
db2-xdb:normalization | Chỉ thị cách xử lý không gian trắng (whitespace) –các giá trị hợp lệ là whitespaceStrip, canonical, và original |
db2-xdb:expression | Chỉ định biểu thức sẽ được áp dụng cho dữ liệu trước khi chèn vào bảng mục tiêu. |
db2-xdb:locationPath | Các bộ lọc dựa trên nội dung XML. Cho ví dụ, sẽ được băm nhỏ vào bảng cust nếu đó là một địa chỉ khách hàng; còn sẽ được băm nhỏ vào bảng employee nếu đó là địa chỉ nhân viên. |
db2-xdb:condition | Chỉ định các điều kiện của giá trị để dữ liệu được chèn vào bảng mục tiêu chỉ khi tất cả các điều kiện thỏa mãn. |
db2-xdb:rowSetMapping | Cho phép người dùng chỉ định nhiều bản đồ hóa, đối với cùng hoặc các bảng khác nhau, cho một thành phần hoặc thuộc tính. |
db2-xdb:table | Bản đồ hóa nhiều thành phần hoặc thuộc tính vào một cột |
db2-xdb:order | Chỉ định thứ tự chèn của các hàng giữa nhiều bảng |
db2-xdb:rowSetOperationOrder | Nhóm nhiều chú thích db2-xdb:order vào với nhau. |
Để minh chứng cho quá trình phân tách giản đồ có chú thích, chúng ta hãy sử dụng kịch bản băm nhỏ trong hình 1 làm ví dụ. Giả dụ rằng các bảng mục tiêu đều được định nghĩa như thể hiện trong hình 1. Giản đồ chú thích định nghĩa việc bản đồ hóa theo mong muốn được cung cấp trong hình 8. Hãy quan sát các dòng được bôi đậm. Dòng bôi đậm đầu tiên tuyên bố tiền tố tên db2-xdb, tiền tố này được sử dụng xuyên suốt giản đồ để phân biệt các chú thích BD2 với các tab XML Schema thông thường. Trường hợp đầu tiên sử dụng tiền tố này nằm trong chú thích db2-xdb:defaultSQLSchema, đây là chú thích định nghĩa giản đồ quan hệ của các bảng mục tiêu. Chú thích tiếp theo xuất hiện trong định nghĩa của thành phần name. Hai thuộc tính của chú thích này db2-xdb:rowSet="ADDRESS" và db2-xdb:column="NAME" định nghĩa bảng và cột mục tiêu cho thành phần name. Tương tự như vậy, các thành phần street và city cũng được bản đồ hóa vào các cột tương ứng của bảng ADDRESS. Hai chú thích tiếp theo bản đồ hóa số điện thoại phone và thuộc tính kiểu type vào các cột trong bảng PHONES. Khối các chú thích cuối cùng thuộc về định nghĩa thuộc tính Cid. Do thuộc tính Cid sẽ trở thành khóa join giữa bảng ADDRESS và PHONE, nên nó phải được bản đồ hóa vào cả hai bảng. Phải cần đến hai bản đồ thiết lập hàng, yêu cầu sử dụng thành phần chú thích - annotation elements thay vì thuộc tính chú thích - annotation attributes. Đầu tiên db2-xdb:rowSetMapping sẽ bản đồ hóa thuộc tính Cid vào cột CID trong bảng ADDRESS. Sau đó db2-xdb:rowSetMapping sẽ gán thuộc tính Cid vào cột CID trong bảng PHONES.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:db2-xdb="http://www.ibm.com/xmlns/prod/db2/xdb1" > <xs:annotation> <xs:appinfo> <db2-xdb:defaultSQLSchema>db2admin</db2-xdb:defaultSQLSchema> </xs:appinfo> </xs:annotation> <xs:element name="customerinfo"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string" minOccurs="1" db2-xdb:rowSet="ADDRESS" db2-xdb:column="NAME"/> <xs:element name="addr" minOccurs="1" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="street" type="xs:string" minOccurs="1" db2-xdb:rowSet="ADDRESS" db2-xdb:column="STREET"/> <xs:element name="city" type="xs:string" minOccurs="1" db2-xdb:rowSet="ADDRESS" db2-xdb:column="CITY"/> <xs:element name="prov-state" type="xs:string" minOccurs="1" /> <xs:element name="pcode-zip" type="xs:string" minOccurs="1" /> </xs:sequence> <xs:attribute name="country" type="xs:string" /> </xs:complexType> </xs:element> <xs:element name="phone" minOccurs="0" maxOccurs="unbounded" db2-xdb:rowSet="PHONES" db2-xdb:column="PHONENUM"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="type" form="unqualified" type="xs:string" db2-xdb:rowSet="PHONES" db2-xdb:column="PHONETYPE"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="Cid" type="xs:integer"> <xs:annotation> <xs:appinfo> <db2-xdb:rowSetMapping> <db2-xdb:rowSet>ADDRESS</db2-xdb:rowSet> <db2-xdb:column>CID</db2-xdb:column> </db2-xdb:rowSetMapping> <db2-xdb:rowSetMapping> <db2-xdb:rowSet>PHONES</db2-xdb:rowSet> <db2-xdb:column>CID</db2-xdb:column> </db2-xdb:rowSetMapping> </xs:appinfo> </xs:annotation> </xs:attribute> </xs:complexType> </xs:element> </xs:schema> |
Định nghĩa các chú thích giản đồ trực giác trong IBM Data Studio
Bạn có thể tự bổ sung thêm các chú thích vào một XML Schema, bằng cách sử dụng bất cứ trình soạn thảo văn bản nào hoặc trình soạn thảo XML Schema. Ngoài ra bạn có thể sử dụng Annotated XSD Mapping Editor trong IBM Data Studio Developer. Để triệu gọi trình soạn thảo, hãy kích chuột phải vào tên của một XML Schema nào đó và chọn Open With, Annotated XSD Mapping Editor. Khi đó cửa sổ trình soạn thảo bản đồ sẽ được hiển thị như trong hình 9. Bên trái của trình soạn thảo thể hiện cấu trúc tài liệu có thứ bậc được định nghĩa bởi XML Schema (Source). Phía bên phải thể hiện các bảng và các cột của giản đồ mục tiêu quan hệ (Target). Bạn có thể bổ sung thêm các quan hệ bản đồ bằng cách kết nối các mục nguồn với cột mục tiêu. Bên cạnh đó chương trình còn có một chức năng khám phá để giúp bạn tìm các mối quan hệ có thể. Các mối quan hệ được bản đồ hóa sẽ được trình bày trong bộ soạn thảo bằng các dòng kẻ giữa các thành phần nguồn và cột mục tiêu.
Hình 9: Trình soạn thảo Annotated XSD Mapping Editor trong Data Studio Developer
Đăng ký giản đồ chú thích
Sau khi đã tạo một XML Schema có chú thích, bạn cần đăng ký nó trong XML Schema Repository của cơ sở dữ liệu. Đối với giản đồ chú thích trong hình 8, chúng ta có đầy đủ thẩm quyền để phát lệnh REGISTER XMLSCHEMA với các tùy chọn COMPLETE và ENABLE DECOMPOSITION của nó như thể hiện trong hình 10. Trong ví dụ này, XML Schema được giả định cư trú trong file /xml/myschemas/cust2.xsd. Nhờ vào hành động đăng ký, nó được gán Id SQL db2admin.cust2xsd. Id này có thể được sử dụng cho việc tham chiếu giản đồ sau này. Tùy chọn COMPLETE của lệnh chỉ thị rằng, không có các tài liệu XML Schema bổ sung được thêm vào. Tùy chọn ENABLE DECOMPOSITION chỉ thị rằng XML Schema có thể được sử dụng không những cho việc hợp lệ hóa tài liệu mà còn có thể được sử dụng cho việc băm nhỏ (shred).
REGISTER XMLSCHEMA 'http://pureXMLcookbook.org' FROM '/xml/myschemas/cust2.xsd' AS db2admin.cust2xsd COMPLETE ENABLE DECOMPOSITION; |
Hình 11 thể hiện rằng bạn có thể truy vấn khung nhìn hạng mục DB2 syscat.xsrobjects để xác định xem liệu giản đồ đã đăng ký có được kích hoạt cho sự phân tách (Y) hay chưa (N).
SELECT SUBSTR(objectname,1,10) AS objectname, status, decomposition FROM syscat.xsrobjects ; OBJECTNAME STATUS DECOMPOSITION ---------- ------ ------------- CUST2XSD C Y |
Trạng thái DECOMPOSITION của giản đồ chú thích sẽ tự động được thay đổi thành X (inoperative) và việc băm nhỏ sẽ bị vô hiệu hóa, nếu bất kỳ các bảng mục tiêu nào bị hạ hoặc một cột mục tiêu nào đó bị thay đổi. Không có cảnh báo nào xuất hiện khi điều này xảy ra và các cố gắng về sau để sử dụng giản đồ cho việc băm nhỏ sẽ thất bại. Bạn có thể sử dụng các lệnh dưới đây để vô hiệu hóa và kích hoạt một giản đồ chú thích cho việc băm nhỏ:
ALTER XSROBJECT cust2xsd DISABLE DECOMPOSITION;
ALTER XSROBJECT cust2xsd ENABLE DECOMPOSITION;
Phân tách một tài liệu XML tại một thời điểm
Sau khi đã đăng ký và kích hoạt một XML Schema chú thích, bạn có thể phân tách các tài liệu XML với lệnh DECOMPOSE XML DOCUMENT hoặc với thủ tục lưu trữ. Lệnh DECOMPOSE XML DOCUMENT rất thuận tiện sử dụng trong DB2 Command Line Processor (CLP), còn thủ tục lưu trữ có thể được gọi từ một chương trình nào đó hoặc CLP. Lệnh CLP sẽ cần đến hai tham số đầu vào: filename của tài liệu XML được băm nhỏ và Id SQL của giản đồ chú thích, như thể hiện trong ví dụ bên dưới:
DECOMPOSE XML DOCUMENT /xml/mydocuments/cust01.xml
XMLSCHEMA db2admin.cust2xsd VALIDATE;
Từ khóa VALIDATE hoàn toàn mang tính tùy chọn và chỉ thị các tài liệu XML có được hợp lệ hóa đối với giản đồ như một phần của quá trình băm nhỏ hay không. Trong khi băm nhỏ, DB2 sẽ xem xét cả tài liệu XML và giản đồ chú thích, phát hiện những vi phạm giản đồ mức cơ sở dù từ khóa VALIDATE không được chỉ định. Cho ví dụ, quá trình băm nhỏ sẽ thất bại nếu một thành phần nào đó có tính bắt buộc bị mất, dù thành phần này không được băm nhỏ và từ khóa VALIDATE bị bỏ qua. Tương tự như vậy, các thành phần không liên quan đến vấn đề được đề cập hoặc các vi phạm về kiểu dữ liệu cũng là nguyên nhân gây ra sự thất bại cho quá trình chia tách. Lý do ở đây là rằng quá trình băm nhỏ sẽ đi qua toàn bộ XML Schema chú thích và tài liệu tức thời và phát hiện được các vi phạm về giản đồ thậm chí bộ phân tích cú pháp XML không thực hiện hành động hợp lệ hóa.
Để phân tách các tài liệu XML từ một chương trình ứng dụng, bạn có thể sử dụng thủ tục lưu trữ XDBDECOMPXML. Các tham số của thủ tục này được thể hiện trong hình 12 và được mô tả chi tiết trong bảng 6.
>>-XDBDECOMPXML--(--rschema--,--xmlschemaname--,--xmldoc--,----> >--documentid--,--validation--,--reserved--,--reserved--,------> >--reserved--)------------------------------------------------>< |
Hình 12: Cú pháp và các tham số của thủ tục lưu trữ XDBDECOMPXML
Tham số | Mô tả |
rschema | Phần giản đồ quan hệ của Id SQL (SQL identifier) hai phần trong XML Schema chú thích. Cho ví dụ, Id SQL của XML Schema là db2admin.cust2xsd, thì bạn nên pass chuỗi 'db2admin' đến tham số này. Trong DB2 cho z/OS, giá trị này phải là 'SYSXSR' hoặc NULL. |
xmlschemaname | Phần thứ hai nằm trong Id SQL của XML Schema chú thích. Nếu Id SQL của XML Schema là db2admin.cust2xsd, thì bạn có thể pass chuỗi 'cust2xsd' đến tham số này. Giá trị lúc này không thể là NULL. |
xmldoc | Trong DB2 cho Linux, UNIX, và Windows, tham số này có kiểu BLOB(1M) và sẽ phân tách tài liệu XML. Trong DB2 cho z/OS, tham số này có kiểu CLOB AS LOCATOR. Và không thể là NULL. |
documentid | Một chuỗi mà bộ gọi có thể sử dụng để phân biệt tài liệu XML đầu vào. Giá trị được cấp sẽ được thay thế cho bất kỳ mục đích của $DECOMP_DOCUMENTID nào được chỉ định trong các chú thích db2-xdb:expression hoặc db2-xdb:condition. |
validation | Các giá trị có thể nhận là 0 (không hợp lệ) và 1 (sự hợp lệ được thực hiện). Tham số này không tồn tại trong DB2 cho z/OS. |
reserved | Các tham số được dự trữ để sử dụng sau này. Các giá trị được pass cho các đối số này phải là NULL. Các tham số này không tồn tại trong DB2 cho z/OS. |
Một đoạn mã Java dùng để gọi thủ tục lưu trữ được thể hiện trong hình 13.
CallableStatement callStmt = con.prepareCall( "call SYSPROC.XDBDECOMPXML(?,?,?,?,?, null, null, null)"); File xmldoc = new File("c:\mydoc.xml");FileInputStream xmldocis = new FileInputStream(xmldoc); callStmt.setString(1, "db2admin" ); 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(); |
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 |
Để 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. |
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 |
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 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. |
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.
<?xml version='1.0' ?> <xdb:errorReport xmlns:xdb="http://www.ibm.com/xmlns/prod/db2/xdb1"> <xdb:document> <xdb:documentId>1002</xdb:documentId> <xdb:errorMsg>SQL16271N Unknown attribute "status" at or near line "1" in document "1002".</xdb:errorMsg> </xdb:document> <xdb:document> <xdb:documentId>1005</xdb:documentId> <xdb:errorMsg> 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 </xdb:errorMsg> </xdb:document> </xdb:errorReport> |
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.
Văn Linh (Theo Informit)
Nguồn: Quản Trị Mạng
Bài đăng phổ biến
-
Bài viết này sẽ đăng 3 lời giải khác nhau cho 1 bài toán tương tự một bài tập trong SGK Toán 12 cơ bản về tập xác định cu...
-
Blogger.com, một dịch vụ blog miễn phí của Google hiện nay đã bị chặn đứng bởi VNPT. Những người sử dụng dịch vụ blog của Blogger.com không ...
-
Lý thuyết và Bài tập Hình học 11 (Nâng cao, Cơ bản) cả năm . Chương trình Hình học 11 gồm có 3 chương: Phép biến hình, Quan...
-
Đọc báo giúp bạn số này xin giới thiệu đến các bạn bài báo "Vài ứng dụng của công thức tính tan15 0 " của thầy Hoàng Đức Nguyên, G...
-
SƠ ĐỒ TƯ DUY I.Sơ đồ tư duy là gì ? 1.Vài nét giới thiệu Chúng ta đang sống trong thời kì phát triển mạnh mẽ, thế giới vận động và thay đổi ...
-
Thắm thoát cũng đã 12 năm đèn sách rồi đó các em hen. Giờ đây đứng trước những ngã rẽ của tương lai, ta biết chọn hướng nào đây? Bản thân cá...
-
Tuyển tập Bất đẳng thức - Võ Quốc Bá Cẩn (An inequality collection 2009 - Vo Quoc Ba Can - The second version). Bản quyền thuộc về Võ Quốc B...
-
Đáp án đề thi CASIO toàn quốc 2011 môn Toán, Lý, Hóa, Sinh ( Giải toán trên Máy tính cầm tay Casio - Máy tính bỏ túi Vinacal ). Bộ đáp án ...
-
Đáp án môn Toán thi vào lớp 10 ở Đà Nẵng năm học 2012 - 2013. Môn Toán được thi vào sáng 23/6/2012. Dưới đây là đề thi và lời giải chi tiế...
-
Bài tập THỂ TÍCH (Hình học 12) gồm lý thuyết và đề bài tập chọn lọc. Trong đó có phần tuyển chọn các bài toán về thể tích trong đề thi tốt n...