Tải bản đầy đủ (.pdf) (15 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (217.79 KB, 15 trang )

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.
Để 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.

Bảng 5. Các chú thích XML Schema
Để 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="
elementFormDefault="qualified"
xmlns:db2-xdb=" >
<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>

Hình 8: Giản đồ chú thích để thực thi quá trình băm nhỏ trong hình 1.
Đị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 ''
FROM '/xml/myschemas/cust2.xsd'
AS db2admin.cust2xsd COMPLETE ENABLE DECOMPOSITION;

Hình 10: Đăng ký giản đồ chú thích XML
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

Hình 11: Kiểm tra trạng thái của XML schema có chú thích
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.

Bảng 6: Phần mô tả các tham số của thủ tục XDBDECOMPXML
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();

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_countGiá 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.
<?xml version='1.0' ?>
<xdb:errorReport
xmlns:xdb="
<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>

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.

Văn Linh (Theo Informit)

×